Mam tabelę, która przechowuje niekompletne daty sekwencji w ciągu roku:
eg.
Jan 1
Jan 4
Jan 9
Jan 24
Jan 25
Feb 16
Feb 18
Feb 21
Feb 28
Mar 3
.
.
.
Dec 31
Muszę zrobić samo złączenie na stole nakolumny dat. Data musi zostać dołączona w dniu, w którym data b wynosi + 1 dzień w sekwencji. Jeśli daty byłyby zakończone, robiłbym łączenie, takie jak a.date = b.date, ale zamiast a.date = DATE_ADD(b.date,INTERVAL 1 DAY)
. Ale muszę to być coś takiego a.date = NEXT_DATE_IN_SEQUENCE(b.date)
, ale oczywiście nie jest to prawdziwa funkcja, ale szukam czegoś takiego.
Odpowiedzi:
1 dla odpowiedzi № 1Możesz użyć produktu półkartezjańskiego:
SELECT a.date, MIN(b.date)
FROM dates a
INNER JOIN dates b ON b.date > a.date
GROUP BY a.date;
1 dla odpowiedzi nr 2
Podejdę do tego za pomocą skorelowanego podzapytania:
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;