我有一个包含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中是否可行,或者任何人都可以建议我可以使用哪些其他工具? (例如,将数据导出到电子表格程序不会有问题)
答案 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
可能会返回一个字符串)
然后按季度分组。
抱歉,我没有准确的语法,但是这种方法可以让您获得功能分组,之后您可以按下输出以使其看起来如您所愿。