2017-05-29 82 views
-1

我有這個域名爲late_in,其中包含像這樣的數據2017-05-29 08:36:44每天進入時間限制爲08:30:00。PostgreSQL每月計算一個月後多少次

我想要做的是獲得年份,月份和月份的晚些時候,即使它在本月晚些時候爲零。

我想要的結果是這個樣子:

year month late 
------------------- 
2017 1  6 
2017 2  0 
2017 3  14 

,並一直持續到今年年底。

+0

什麼你的意思是'進入時間限制是每天08:30:00'。這如何影響理想的結果? –

+0

我的意思是我的辦公室錄入時間是08:30:00,所以超過這個數將會算作 – Faiz

回答

2

您正在尋找有條件聚集:

select extract(year from late_in) as year, 
     extract(month from late_in) as month, 
     count(*) filter (where late_in::time > time '08:30:00') as late 
from the_table 
group by extract(year from late_in), 
     extract(month from late_in); 

這假定late_in定義爲timestamp

表達late_in::time只返回值的時間部分和用於聚合將導致只有那些行的filter()子句進行計數,其中條件爲真,即,其中在部分時間是08:30之後

+0

我認爲,你必須使用where而不是在過濾之後。並刪除選擇組後。 –

+0

謝謝。效果很好。但是即使月底時間爲0,是否可以顯示一年中的整整一個月份? – Faiz

+0

@Faiz:那將顯示一個零計數,除非該表中沒有該行的那一行。 –