逐月选择

时间:2011-07-03 12:56:57

标签: sql postgresql

我需要编写一个打印每日调用统计信息的查询。 我的电话表看起来像这样:

user    date
1       3/6/2011
1       15/7/2011

我的结果应该是这样的:

date               count

1/6/2011            0
2/6/2011            0
3/6/2011            1
...
30/6/2011           0

我该怎么办?

3 个答案:

答案 0 :(得分:1)

使用generate_series(start, stop, step interval)创建要加入的列表。

答案 1 :(得分:1)

尝试:

SELECT month.date, count(userid)
FROM generate_series(DATE '2011-06-01', DATE '2011-06-30', '1 day') month
LEFT JOIN calls ON (month.date = calls.date)
GROUP BY month.date
ORDER BY month.date ASC;

更通用的解决方案(因此您可以指定月份和年份作为参数):

SELECT month.date, count(userid)
FROM generate_series(DATE '2011-06-01', DATE '2011-06-01' + INTERVAL '1 month' - INTERVAL '1 day', '1 day') month
LEFT JOIN calls c ON (month.date = c.date)
GROUP BY month.date
ORDER BY month.date ASC;

答案 2 :(得分:0)

你正在寻找的只是一个小组吗?

select date, count(*) from tablename
group by date 
order by date desc