2011-07-26 120 views
12

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

有没有另外一种方法来完成这个?我最好喜欢灵活的解决方案,这样我就可以使用我需要的任何时间范围(小时,每月,每周等)。感谢您提供任何建议!

+1

当您尝试按时间戳列进行分组时,它会给您带来什么样的错误?它似乎在这里工作正常,请记住,时间戳必须相同(低至微秒,或者最小分辨率),才能分组。 – Anomie

回答

11

通过时间戳列进行分组对于我来说工作正常,请记住即使1微秒的差异也会阻止将两行分组在一起。

要按较大的时间段进行分组,请按timestamp列上的表达式进行分组,以返回适当截断的值。 date_trunc可以在这里很有用,to_char也可以。

+0

date_trunc函数正是我正在寻找的。谢谢! – Shadowman

15

这样做没有date_trunc函数(更容易阅读)。

select created_on::DATE from users group by created_on::DATE 

我们在这里做什么是铸造原值为日期在这个值无关紧要的渲染时间数据。

+1

正是我所期待的,转换为像“2016-06-27”这样的日期,易于快速统计(*)天 –

+0

我不认为DATE的类型转换时间戳将在Group By中工作,因为它是不为我工作。 – hky404