Ik heb de volgende database:
Database gegevens
Tabel a:
CREATE TABLE `a` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`tijd_in` TIME NULL,
`tijd_uit` TIME NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC));
INSERT INTO `a` (`tijd_in`, `tijd_uit`) VALUES ('18:00:00', '20:00:00');
INSERT INTO `a` (`tijd_in`, `tijd_uit`) VALUES ('17:00:00', '21:00:00');
INSERT INTO `a` (`tijd_in`, `tijd_uit`) VALUES ('17:00:00', '19:00:00');
INSERT INTO `a` (`tijd_in`, `tijd_uit`) VALUES ('19:00:00', '21:00:00');
Tabel b:
CREATE TABLE `b` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`factor` DECIMAL(3,2) NOT NULL,
`tijd_in` TIME NULL,
`tijd_uit` TIME NULL,
PRIMARY KEY (`id`, `factor`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC));
INSERT INTO `b` (`factor`, `tijd_in`, `tijd_uit`) VALUES ('1.50', '00:00:00', '04:00:00');
INSERT INTO `b` (`factor`, `tijd_in`, `tijd_uit`) VALUES ('1.25', '18:00:00', '20:00:00');
In tabel a staan diverse tijden waarover conform tabel b een bepaalde factor overheen moet.
Voorbeeld:
Regel 1 van tabel a:
18:00:00 valt onder de factor van tabel b met id = 2.
Over de tijd 20:00:00 - 18:00:00 = 2 uur moet dus een factor van 1.25.
2 * 1.25 = 2.5 als eindresultaat.
Regel 2 van tabel a:
17:00:00 valt ook onder de factor van tabel b met id = 2
* Over de tijd van 17:00:00 t/m 18:00:00 wordt geen factor berekend
* Over de tijd van 18:00:00 t/m 20:00:00 wordt wel een factor berekend
* Over de tijd van 20:00:00 t/m 21:00:00 wordt weer geen factor berekend
Zo zijn er dus diverse opties mogelijk.
In tabel b staat dus de tijd wanneer zo'n factor berekend moet worden over tabel a heen.
Huidige situatie:
Voor elke factor wordt er nu handmatig vergeleken in de query. Dit moet geautomatiseerd worden.
Dit is een voorbeeld van hoe een deel wordt gedaan nu. Dit gebeurd voor alle mogelijke opties en toeslagen.
CASE
WHEN
(
tijd_in <= '00:00:00' AND tijd_uit > '00:00:00' AND tijd_uit < '6:00:00'
)
THEN
(
ROUND((TIME_TO_SEC(TIMEDIFF(TIME('06:00:00'), tijd_uit))/3600),2)
)
ELSE
(.........
Conclusie:
Bovenstaande situatie zou ik graag willen realiseren. Er is al een bestaande situatie, maar wil deze vernieuwen om performance winst te boeken. Het kan totaal om duizenden/tienduizenden regels gaan waarover dit berekend moet worden.
Hoe kan ik deze situatie het beste aanpakken? Alvast bedankt voor je hulp.