Eu tenho uma tabela que armazena uma seqüência incompleta datas dentro do ano:
eg.
Jan 1
Jan 4
Jan 9
Jan 24
Jan 25
Feb 16
Feb 18
Feb 21
Feb 28
Mar 3
.
.
.
Dec 31
Eu preciso fazer um auto se juntar à mesa nocoluna de datas. A data precisa se unir na data a onde a data b é + 1 dia na seqüência. Se as datas estivessem completas, eu faria uma junção como a.date = b.date mas em vez de a.date = DATE_ADD(b.date,INTERVAL 1 DAY)
. Mas eu preciso ser algo assim a.date = NEXT_DATE_IN_SEQUENCE(b.date)
, mas é claro que isso não é uma função real, mas estou procurando por algo assim.
Respostas:
1 para resposta № 1Você poderia usar um produto semi-cartesiano:
SELECT a.date, MIN(b.date)
FROM dates a
INNER JOIN dates b ON b.date > a.date
GROUP BY a.date;
1 para resposta № 2
Eu abordaria isso usando uma subconsulta correlacionada:
select t.*,
(select t2.date
from table t2
where t2.date > t.date
order by t2.date
limit 1
) as next_date
from table t;