2010-09-25 25 views
0

好吧,所以我有一個名爲log的(SQLite)表,其中一列(時間)是Unix紀元時間戳(其他列是不相關的爲我的目的)。這些是時間戳記的日誌條目。SQL查詢以獲得給定列有多少項具有每個可能值的計數

我正在嘗試計算每小時記錄多少項目(全天候 - 我不介意只在特定的一天或任何時間執行此操作;我試圖獲得有關活動密度在整個平均天)。我已經成功地將這些數據基本上分爲幾小時,查詢SELECT STRFTIME('%H', DATETIME(time, 'unixepoch', 'localtime')) FROM log;,然後給我一個龐大的數字清單0-23,我可以通過uniq -c運行得到每小時事件的計數。然而,(我承認更多的頑固性比任何實際需要都要大),我想在SQL中做這個計數步驟。我的大腦讓我知道我很可能不得不做一些自我加入來獲得生成的小時數列的唯一值,但這就是它出現的地方D:任何想法?

回答

2
SELECT STRFTIME('%H', DATETIME(time, 'unixepoch', 'localtime')), 
COUNT(anotherField) 
FROM log 
GROUP BY STRFTIME('%H', DATETIME(time, 'unixepoch', 'localtime')); 

注意:我還沒有使用SQLite。但是,它支持GROUP BY,因此,這應該工作。

+0

+1:GROUP BY需要在標準SQL,但[SQLite的(如MySQL)不支持隱藏的列(http://www.sqlite.org/lang_select.html) – 2010-09-25 20:32:08

+0

噢,天哪,我忘了所有關於GROUP BY,顯示我是多麼生疏。這個查詢可能會有點慢,但對於我正在處理的事情來說,它確實很好。順便說一下,選擇STRFTIME(...)作爲小時GROUP BY小時可能會更好。 – tgies 2010-09-25 20:33:23

+0

@tgies:我不知道SQLite是否支持「GROUP BY hour」類型的語法,因爲我沒有使用它。其他數據庫(如SQL Server)不支持IIRC組中的列別名。 – shahkalpesh 2010-09-25 21:04:49

1

爲什麼要使用COUNT(anotherField)?

使用SELECT [your expression], COUNT(*) FROM log GROUP BY [your expression]

相關問題