SQLite“ GROUP BY”查询奇怪地舍入

邓肯·麦克阿德尔(Duncan McArdle)

作为记录事件然后为用户绘制图表的应用程序的一部分,我正在运行一个查询,该查询运行到最近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小时返回一次,以第一个小时命名。因此,应该将介于4PM(16:00)到6PM(18:00)的间隔称为16,但改为在17出现。

这是SQLite中GROUP BY的正常行为吗?我是否期望它能按我希望的那样工作呢?

提前致谢!

LS_ᴅᴇᴠ
strftime('%H', datetime(timestamp/1000, 'unixepoch')) AS Hour

将返回小时,而不是您的“间隔名称”。您的分组子句使用类似Hour/2这样的内容...

例如:

 datetime        hour      hour/2
 --------------------------------
 17:00           17        8
 17:30           17        8
 16:00           16        8
 16:30           16        8

如果这组结果,通过hour/2hour在结果集可能是1716,行为未定义。

但是,如果您创建一个hour interval字段,则无法解决(并简化)查询:

Select strftime('%H', datetime(timestamp/1000, 'unixepoch'))/2*2 AS HourInterval, COUNT(*) AS DateCount
FROM TableName 
WHERE Timestamp >= 1414605600000 AND Timestamp < 1414692000000 
GROUP BY HourInterval
ORDER BY timestamp ASC LIMIT 0,12

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Sqlite GROUP BY优先级

来自分类Dev

带列表的SQLite查询

来自分类Dev

GROUP BY子句以sqlite获取逗号分隔的值

来自分类Dev

android SQLite查询是否懒惰地执行?

来自分类Dev

SQLITE中的组联系人中的GROUP BY

来自分类Dev

在SQLite中使用SELECT ... GROUP BY ... HAVING

来自分类Dev

sqlite舍入“错误”

来自分类Dev

奇怪的SQLite行为。结果不同;相同的查询

来自分类Dev

SQLite更新查询错误

来自分类Dev

提高sqlite查询速度

来自分类Dev

android sqlite查询慢

来自分类Dev

SQLite或JDBC奇怪的行为

来自分类Dev

SQLAlchemy group_by SQLite与PostgreSQL

来自分类Dev

使用Java的sqlite查询

来自分类Dev

SQL Group By和COALESCE在sqlite上的问题

来自分类Dev

Sqlite查询,多个左联接和嵌套查询的Group_Concat

来自分类Dev

SQLite中的GROUP_CONCAT

来自分类Dev

Sqlite GROUP BY优先级

来自分类Dev

使用GROUP BY和ORDER BY进行mysql查询的奇怪结果

来自分类Dev

使用GROUP BY的SQLite更新

来自分类Dev

`使用SUM和GROUP BY将mySQL查询转换为SQLite

来自分类Dev

Sqlite舍入

来自分类Dev

SQLite查询到GROUP BY附近的行

来自分类Dev

SQLite GROUP查询

来自分类Dev

Android SQLite 奇怪的错误

来自分类Dev

GROUP_CONCAT 很奇怪

来自分类Dev

在 SQLite 中将术语从 GROUP BY 中删除?

来自分类Dev

MySQL GROUP BY 函数有时会奇怪地跳过

来自分类Dev

为什么sqlite为count(*)和group by查询返回null?