2013-02-08 86 views
13

我有一張表,用於存儲我運行的web服務的用戶訪問/查看日誌。它追蹤時間作爲一個時間戳,雖然我發現當我做彙總報告時,我只關心一天,而不是時間。按時間分組時間戳,而不是按時間

我目前運行下面的查詢:

SELECT user_logs.timestamp 
    FROM user_logs 
     WHERE user_logs.timestamp >= %(timestamp_1)s 
      AND user_logs.timestamp <= %(timestamp_2)s 
       ORDER BY user_logs.timestamp 

經常有其他有條件的地方,但他們不應該的問題的問題。我使用Postgres,但我會假設使用的任何功能都可以在其他語言中使用。

我將結果拖到一個Python腳本中,該腳本計算每個日期的視圖數量,但如果數據庫可以對我進行分組和計數,它對我來說會更有意義。

我該如何剝離它,這樣它會按日分組而忽略時間?

回答

28
SELECT date_trunc('day', user_logs.timestamp) "day", count(*) views 
FROM user_logs 
WHERE user_logs.timestamp >= %(timestamp_1)s 
    AND user_logs.timestamp <= %(timestamp_2)s 
group by 1 
ORDER BY 1 
+21

PostgreSQL快捷方式:'user_logs.timestamp :: date'而不是'date_trunc('day',user_logs.timestamp)''。 –

+0

謝謝你倆:) – Teifion

+4

@Igor注意,對':: date'的轉換會丟失時區信息,而'date_trunc'不會。當你想比較同一天兩年和那一天從一個時區變爲另一個時,這可能很重要。 –