PostgreSQL - GROUP BY时间戳值?

时间:2011-07-26 15:30:30

标签: sql database postgresql timestamp group-by

我有一张存储有采购订单的表格。每行都有一个时间戳,指示订单的下达时间。我希望能够创建一份报告,指出每天,每月或每年的购买数量。我想我会做一个简单的SELECT COUNT(xxx)FROM tbl_orders GROUP BY tbl_orders.purchase_time并获取值,但事实证明我不能GROUP BY一个时间戳列。

还有另一种方法可以实现这一目标吗?理想情况下,我喜欢灵活的解决方案,所以我可以使用我需要的任何时间范围(每小时,每月,每周等)。感谢您提供任何建议!

2 个答案:

答案 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_truncto_char可以很有用。