5

我有一个包含日期时间列和一些其他列的表。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 中是否可行,或者任何人都可以建议我可以使用哪些其他工具?(例如,将数据导出到电子表格程序不会有问题)

4

2 回答 2

13

试试这个:

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

在这里检查小提琴。

于 2012-04-11T17:15:29.063 回答
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)

在 SQLite 中获取数字的底值?

串在一起可能看起来像:

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

(您可能还需要在除以 15 之前进行转换,因为strftime可能会返回一个字符串)

然后按一刻钟分组。

抱歉,我没有为您提供确切的语法,但这种方法应该使您能够获得功能分组,之后您可以按摩输出以使其看起来像您想要的那样。

于 2012-04-11T17:03:35.540 回答