Dalej uczę się sql i chciałem zrobić zapytanie, które na podstawie przedziału dat zliczy ile razy występuje event w danym przedziale.
Mam
Tak jest ogólnie grubsze zapytanie. Które ostatecznie to wypluwa
wygenerowałem sobie również przedział czasowy
generate_days as (
select dayDate::date from generate_series('2020-05-24T10:51:51',
'2022-06-24T10:51:51', '1 day'::interval) dayDate
)
próbowałem połączyć to w taki sposób
select generate_days.dayDate, count(generate_days.dayDate) from items, generate_days
where generate_days.dayDate between items.lower and items.upper
group by generate_days.dayDate
Jednakże to powoduje błędne zliczanie
nie chcę robić tego po stronie backendu tylko, aby sql zwrócił mi poprawną wartość
Trochę opornie idzie mi nauka sql
EDIT:
spróbowałem również takie zapytanie
select generate_days.dayDate, count(generate_days.dayDate) from generate_days
left join items on generate_days.dayDate between items.lower and items.upper
group by generate_days.dayDate
Jednak zwracane są częściowo fałszywe wyniki. Dla przedziałów, które nie istnieją wartość count(generate_days.dayDate)
wynosi 1. Jeżeli podany przedział istnieje, to ilość zliczana jest chyba poprawnie jednak nie, też jest za dużo danych zliczonych