我有一张存储有采购订单的表格。每行都有一个时间戳,指示订单的下达时间。我希望能够创建一份报告,指出每天,每月或每年的购买数量。我想我会做一个简单的SELECT COUNT(xxx)FROM tbl_orders GROUP BY tbl_orders.purchase_time并获取值,但事实证明我不能GROUP BY一个时间戳列。
还有另一种方法可以实现这一目标吗?理想情况下,我喜欢灵活的解决方案,所以我可以使用我需要的任何时间范围(每小时,每月,每周等)。感谢您提供任何建议!
答案 0 :(得分:18)
这样做没有date_trunc函数(更容易阅读)。
// 2014
select created_on::DATE from users group by created_on::DATE
// updated September 2018 (thanks to @wegry)
select created_on::DATE as co from users group by co
我们在这里做的是将原始值转换为DATE,使得此值中的时间数据无关紧要。
答案 1 :(得分:12)
按时间戳列进行分组在这里工作正常,请记住,即使1微秒的差异也会阻止两行组合在一起。
要按较大的时间段进行分组,请按时间戳列上的表达式进行分组,该表达式返回适当的截断值。 date_trunc
在to_char
可以很有用。