【发布时间】:2012-11-05 00:12:34
【问题描述】:
我想使用generate_series() 计算每个月的 ID。此查询适用于 PostgreSQL 9.1:
SELECT (to_char(serie,'yyyy-mm')) AS year, sum(amount)::int AS eintraege FROM (
SELECT
COUNT(mytable.id) as amount,
generate_series::date as serie
FROM mytable
RIGHT JOIN generate_series(
(SELECT min(date_from) FROM mytable)::date,
(SELECT max(date_from) FROM mytable)::date,
interval '1 day') ON generate_series = date(date_from)
WHERE version = 1
GROUP BY generate_series
) AS foo
GROUP BY Year
ORDER BY Year ASC;
这是我的输出:
"2006-12" | 4
"2007-02" | 1
"2007-03" | 1
但我想得到的是这个输出(一月份的'0'值):
"2006-12" | 4
"2007-01" | 0
"2007-02" | 1
"2007-03" | 1
仍然应该列出没有id 的月份。
任何想法如何解决这个问题?
样本数据:
drop table if exists mytable;
create table mytable(id bigint, version smallint, date_from timestamp);
insert into mytable(id, version, date_from) values
(4084036, 1, '2006-12-22 22:46:35'),
(4084938, 1, '2006-12-23 16:19:13'),
(4084938, 2, '2006-12-23 16:20:23'),
(4084939, 1, '2006-12-23 16:29:14'),
(4084954, 1, '2006-12-23 16:28:28'),
(4250653, 1, '2007-02-12 21:58:53'),
(4250657, 1, '2007-03-12 21:58:53')
;
【问题讨论】:
标签: sql postgresql join postgresql-9.1 generate-series