2010-09-25 15 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]

相关问题