2017-05-29 48 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:那将显示一个零计数,除非该表中没有该行的那一行。 –