add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE prices ( id INT AUTO_INCREMENT PRIMARY KEY,
productID INT,
startDate DATE,
endDate DATE,
price DECIMAL(10, 2),
CHECK (startDate <= EndDate));
CREATE TRIGGER check_for_overlapping
BEFORE INSERT
ON prices
FOR EACH ROW
BEGIN
IF EXISTS ( SELECT NULL
FROM prices
WHERE prices.productID = NEW.productID
AND prices.startDate <= NEW.EndDate
AND NEW.startDate <= prices.EndDate ) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Entered data overlaps with existing data';
END IF;
END;
-- valid data
INSERT INTO prices (productID, startDate, endDate, price)
VALUES
(1, '2020-01-01', '2020-02-01', 120),
(1, '2020-02-02', '2020-03-02', 121),
(1, '2020-03-03', '2020-04-03', 122);
-- valid data
INSERT INTO prices (productID, startDate, endDate, price)
VALUES
(2, '2020-01-01', '2020-02-01', 123),
(2, '2020-02-02', '2020-03-02', 124);
-- try to insert invalid data
INSERT INTO prices (productID, startDate, endDate, price)
VALUES
(2, '2020-03-02', '2020-04-03', 125);
Entered data overlaps with existing data
-- try to insert invalid data
INSERT INTO prices (productID, startDate, endDate, price)
VALUES
(2, '2020-02-03', '2020-02-04', 126);
Entered data overlaps with existing data
-- valid data
INSERT INTO prices (productID, startDate, endDate, price)
VALUES
(2, '2020-03-03', '2020-04-03', 127);
SELECT * FROM prices;
id productID startDate endDate price
1 1 2020-01-01 2020-02-01 120.00
2 1 2020-02-02 2020-03-02 121.00
3 1 2020-03-03 2020-04-03 122.00
4 2 2020-01-01 2020-02-01 123.00
5 2 2020-02-02 2020-03-02 124.00
6 2 2020-03-03 2020-04-03 127.00