按时间分组记录

时间:2012-04-11 16:46:22

标签: sql sqlite aggregate group-by

我有一个包含datetime列和一些misc其他列的表。 datetime列表示发生的事件。它可以包含一个时间(当时发生的事件)或NULL(事件未发生)

我现在想要计算特定时间间隔(15分钟)内发生的记录数,但不知道该怎么做。

示例:

id | time                | foreign_key
1  | 2012-01-01 00:00:01 | 2
2  | 2012-01-01 00:02:01 | 4
3  | 2012-01-01 00:16:00 | 1
4  | 2012-01-01 00:17:00 | 9
5  | 2012-01-01 00:31:00 | 6

我现在想要创建一个创建类似于:

的结果集的查询
interval            | COUNT(id)
2012-01-01 00:00:00 | 2
2012-01-01 00:15:00 | 2
2012-01-01 00:30:00 | 1

这在SQL中是否可行,或者任何人都可以建议我可以使用哪些其他工具? (例如,将数据导出到电子表格程序不会有问题)

2 个答案:

答案 0 :(得分:10)

尝试一下:

select datetime((strftime('%s', time) / 900) * 900, 'unixepoch') interval,
       count(*) cnt
from t
group by interval
order by interval

检查小提琴here

答案 1 :(得分:1)

我的SQLite背景有限(并且没有练习实例),但我会尝试使用

来抓取会议记录
strftime( FORMAT, TIMESTRING, MOD, MOD, ...)

使用%M修饰符(http://souptonuts.sourceforge.net/readme_sqlite_tutorial.html

然后将它除以15,得到商的FLOOR,以确定你所在的四分之一小时(例如,0,1,2或3)

cast(x as int)

Getting the floor value of a number in SQLite?

将它们结合起来可能看起来像:

Select cast( (strftime( 'YYYY-MM-DD HH:MI:SS', your_time_field, '%M') / 15) as int) from your_table

(你可能需要在除以15之前进行施法,因为strftime可能会返回一个字符串)

然后按季度分组。

抱歉,我没有准确的语法,但是这种方法可以让您获得功能分组,之后您可以按下输出以使其看起来如您所愿。