Ho una query per ottenere le date che non sono presenti nella tabella del database.trovare le date mancanti nell'intervallo di date
Ho sotto le date nel database.
2013-08-02
2013-08-02
2013-08-02
2013-08-03
2013-08-05
2013-08-08
2013-08-08
2013-08-09
2013-08-10
2013-08-13
2013-08-13
2013-08-13
e voglio il risultato che si prevede come sotto,
2013-08-01
2013-08-04
2013-08-06
2013-08-07
2013-08-11
2013-08-12
come si può vedere risultato ha sei date che non sono presenti nel database,
ho provato sotto interrogazione
SELECT
DISTINCT DATE(w1.start_date) + INTERVAL 1 DAY AS missing_date
FROM
working w1
LEFT JOIN
(SELECT DISTINCT start_date FROM working) w2 ON DATE(w1.start_date) = DATE(w2.start_date) - INTERVAL 1 DAY
WHERE
w1.start_date BETWEEN '2013-08-01' AND '2013-08-13'
AND
w2.start_date IS NULL;
ma sopra il ritorno seguente risultato.
2013-08-04
2013-08-14
2013-08-11
2013-08-06
come si può vedere la sua darmi indietro di quattro date da quel 14 non è necessaria, ma la sua ancora non contengono 3 date la sua causa della sinistra unirsi.
Ora per favore guarda nella mia domanda e fammi sapere quali sono il modo migliore in cui posso farlo?
Grazie per guardare e dare tempo.
"come si può vedere il risultato ha sei date che non sono presenti nel database". Questo mi fa ridere. Vedo milioni di date non nei dati (almeno dal momento che gli umani hanno riconosciuto che cos'è una data). Come fai a sapere quali sono i valori iniziali e finali? –
Per la natura dell'algebra relazionale, è impossibile pensare che il DB deduca * un numero imprecisato * di dati mancanti. La cosa migliore che potresti fare è probabilmente trovare la data * non vuota * intervallo * tra due date già presenti nella tua tabella. –
@GordonLinoff penso che tu abbia dimenticato di vedere la query ... ho già impostato 'w1.start_date TRA '2013-08-01' E '2013-08-13'' quindi da quello posso dire che mancano sei date ... –