Situazione Elementi presenti nel DataBase
IDRecord | DataInizio | DataFine | Ditta |
-----------------------------------------------------
01 | 01/01/1980 | 27/02/1980 | ditta1|
02 | 28/02/1980 | 27/05/2013 | ditta2|
03 | 28/02/2013 | 27/02/2015 | ditta3|
04 | 28/10/2015 | 03/04/2016 | ditta4|
04 | 04/04/2016 | null | ditta5|
Se ho capito bene tu fai le seguenti verifiche :
PRIMO CASO : Fai una verifica che la DataSistema è compresa tra DataInizio e DataFine.
(Esempio : DataSistema= 28/02/1980)
Esiti verifica :
TRUE - Visualizza ( Deve apparire il record se la DataSistema è inferiore)
FALSE - Non Visualizza (Se la DataSistema è maggiore scarta Record)
Io userei una CREATE VIEW o CREATE OR REPLACE VIEW in questa maniera :
Ipotetica query :
a- Prima seleziono tutti i record che rispettano la condizione che DataInizio sia più piccola della DataSistema
b- Verifico che DataFine sia più Grande della DataSistema
c- Aggiungo tutti i record dove DataFine era nulla ma che DataInizio sia Uguale o Maggiore di DataSistema
//DataSistema = 1980/02/28
SELECT DISTINCT tb1.`id`, tb1.`DataInizio`, tb1.`DataFine` , tb1.`Ditta`
FROM `tb_assunzione` as tb1
WHERE (tb1.`DataInizio`<='1980/02/28')
AND EXISTS (
SELECT *
FROM ElencoDate
WHERE (ElencoDate.`DataFine` > '1980/02/28' ) AND ElencoDate.`id` = tb1.`id`
)
OR EXISTS(
SELECT *
FROM ElencoDateNulle
WHERE (ElencoDateNulle.`DataInizio`>='1980/02/28') AND ElencoDateNulle.`id` = tb1.`id`
)
//DataSistema = 2015/10/28
SELECT DISTINCT tb1.`id`, tb1.`DataInizio`, tb1.`DataFine` , tb1.`Ditta`
FROM `tb_assunzione` as tb1
WHERE (tb1.`DataInizio`<='2015/10/28')
AND EXISTS (
SELECT *
FROM ElencoDate
WHERE (ElencoDate.`DataFine` > '2015/10/28' ) AND ElencoDate.`id` = tb1.`id`
)
OR EXISTS(
SELECT *
FROM ElencoDateNulle
WHERE (ElencoDateNulle.`DataInizio`>='2015/10/28') AND ElencoDateNulle.`id` = tb1.`id`
)
//DataSistema = 2015/02/16
SELECT DISTINCT tb1.`id`, tb1.`DataInizio`, tb1.`DataFine` , tb1.`Ditta`
FROM `tb_assunzione` as tb1
WHERE (tb1.`DataInizio`<='2015/02/16')
AND EXISTS (
SELECT *
FROM ElencoDate
WHERE (ElencoDate.`DataFine` > '2015/02/16' ) AND ElencoDate.`id` = tb1.`id`
)
OR EXISTS(
SELECT *
FROM ElencoDateNulle
WHERE (ElencoDateNulle.`DataInizio`>='2015/02/16') AND ElencoDateNulle.`id` = tb1.`id`
)
//DataSistema = 2016/04/04
SELECT DISTINCT tb1.`id`, tb1.`DataInizio`, tb1.`DataFine` , tb1.`Ditta`
FROM `tb_assunzione` as tb1
WHERE (tb1.`DataInizio`<='2016/04/04')
AND EXISTS (
SELECT *
FROM ElencoDate
WHERE (ElencoDate.`DataFine` > '2016/04/04' ) AND ElencoDate.`id` = tb1.`id`
)
OR EXISTS(
SELECT *
FROM ElencoDateNulle
WHERE (ElencoDateNulle.`DataInizio`>='2016/04/04') AND ElencoDateNulle.`id` = tb1.`id`
)
Non ho avuto tempo per verificare la correttezza, mi pare che fungono.
Saluti Davide
P.S. Quando ho un attimo di tempo verifico
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it