我有这个域名为late_in
,其中包含像这样的数据2017-05-29 08:36:44每天进入时间限制为08:30:00。PostgreSQL每月计算一个月后多少次
我想要做的是获得年份,月份和月份的晚些时候,即使它在本月晚些时候为零。
我想要的结果是这个样子:
year month late
-------------------
2017 1 6
2017 2 0
2017 3 14
,并一直持续到今年年底。
我有这个域名为late_in
,其中包含像这样的数据2017-05-29 08:36:44每天进入时间限制为08:30:00。PostgreSQL每月计算一个月后多少次
我想要做的是获得年份,月份和月份的晚些时候,即使它在本月晚些时候为零。
我想要的结果是这个样子:
year month late
-------------------
2017 1 6
2017 2 0
2017 3 14
,并一直持续到今年年底。
您正在寻找有条件聚集:
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之后
我认为,你必须使用where而不是在过滤之后。并删除选择组后。 –
谢谢。效果很好。但是即使月底时间为0,是否可以显示一年中的整整一个月份? – Faiz
@Faiz:那将显示一个零计数,除非该表中没有该行的那一行。 –
什么你的意思是'进入时间限制是每天08:30:00'。这如何影响理想的结果? –
我的意思是我的办公室录入时间是08:30:00,所以超过这个数将会算作 – Faiz