Re: Potentially annoying question about date ranges
От | Tom Lane |
---|---|
Тема | Re: Potentially annoying question about date ranges |
Дата | |
Msg-id | 15846.1159643816@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Potentially annoying question about date ranges (Jan Danielsson <jan.danielsson@gmail.com>) |
Список | pgsql-novice |
Jan Danielsson <jan.danielsson@gmail.com> writes: > Is there a painfully obvious way (that I'm missing) to get all dates > included in a query, using my current table design, so that my average > will tell me how much I spend per day on average - including those days > I don't spend anything. Not sure about pure-SQL-standard ways, but the way I'd do it in PG is to generate all the dates in the desired range using generate_series, say like this: select avg(dayspend) from (select sum(coalesce(amt,0)) as dayspend from (select '2006-01-01'::date + n as dt from generate_series(0,'2006-12-31'::date-'2006-01-01'::date) as n) as days left join transaction on (transaction.dt = days.dt) group by days.dt) as ss; You could make it a little cleaner by creating a function: create function generate_dates(start date, stop date) returns setof date as $$select $1 + n from generate_series(0, $2-$1) as n$$ language sql strict; select avg(dayspend) from (select sum(coalesce(amt,0)) as dayspend from (select generate_dates('2006-01-01','2006-12-31') as dt) as days left join transaction on (transaction.dt = days.dt) group by days.dt) as ss; regards, tom lane
В списке pgsql-novice по дате отправления: