2011-07-26 137 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