【发布时间】:2014-10-31 08:51:09
【问题描述】:
作为记录事件然后为用户绘制图表的应用程序的一部分,我正在运行一个过去 24 小时内运行的查询,计算按 2 小时间隔分组的记录,然后将它们显示在表格上 (因此输入 12 个条目)。
我使用的查询是动态生成的,但我昨晚运行的一个示例如下:
Select strftime('%H', datetime(timestamp/1000, 'unixepoch')) AS Hour, COUNT(*) AS DateCount
FROM TableName
WHERE Timestamp >= 1414605600000 AND Timestamp < 1414692000000
GROUP BY (strftime('%H', datetime(timestamp/1000, 'unixepoch')) / 2)
ORDER BY timestamp ASC LIMIT 0,12
它的作用是返回按 2 小时间隔分组的结果列表,以第一小时命名。例如,如果查询在下午 6:05 运行,结果应该是:
Hour | DateCount
----------------
18 | 3 records // Previous day
20 | 4 records // Previous day
22 | 2 records // Previous day
... pattern continues until the 4-6PM gap today...
16 | 3 records // Today
但是,实际发生的情况是,第一个结果返回 7 小时。实际上,该查询中的 GROUP BY 语句应该每隔 2 小时返回一次,以第一个小时命名。所以下午 4 点(16:00)到下午 6 点(18:00)的间隔应该被称为 16,而不是它在 17 点出来。
这是 SQLite 中 GROUP BY 的正常行为吗?我期望它按我想要的那样工作,是不是要求太多了?
提前致谢!
【问题讨论】:
标签: android sql sqlite group-by