我需要編寫一個查詢,打印日常呼叫統計。 我的電話表看起來像這樣: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
我怎麼能做到這一點?
我需要編寫一個查詢,打印日常呼叫統計。 我的電話表看起來像這樣: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
我怎麼能做到這一點?
與嘗試:
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;
使用generate_series(start, stop, step interval)創建要加入的列表。
留下參加我應該做的??? – Rami
@Rami:你知道使用'LEFT JOIN'這個事實表明你只對有人爲你工作感興趣。 –
它只是你正在尋找的一組?
select date, count(*) from tablename
group by date
order by date desc
這將不會顯示缺少日期的值 –
我需要加入我的表與generate_series(開始,停止,步間隔) – Rami
謝謝,這幫了我很多 – Rami