2012-04-11 60 views
4

我有一个包含日期时间列和其他一些其他列的表。日期时间列表示正在发生的事件。它可以包含一个时间(当时发生的事件)或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这是可能的或任何人可以告诉我可以用什么样的工具? (例如,将数据导出到电子表格程序将不会是一个问题)

回答

8

试试这个:

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

检查小提琴here

+2

巧妙使用整数舍入+ unix timestamp,ty – dtech 2012-04-13 10:17:34

1

我有限的SQLite的背景(没有实践实例),但我想尝试抓住分钟,同时使用

strftime(FORMAT, TIMESTRING, MOD, MOD, ...) 

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

然后除以15,让你的智商的地板找出你在(例如,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可能返回一个字符串)

然后按一刻钟。

对不起,我没有确切的语法你,但这种方法应该使您能够获得功能分组,之后可以按摩输出,使它看起来要如何。