2011-07-03 86 views
2

我需要編寫一個查詢,打印日常呼叫統計。 我的電話表看起來像這樣:select by month

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 

我怎麼能做到這一點?

回答

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; 
+0

謝謝,這幫了我很多 – Rami

0

它只是你正在尋找的一組?

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

這將不會顯示缺少日期的值 –

+1

我需要加入我的表與generate_series(開始,停止,步間隔) – Rami