SQL - 按 ID 分组和从变量起点开始的时间间隔

标签 sql oracle datetime plsql group-by

我有一个事件日志表,在每一行记录 ID 和 DT_EVENT,即:

ID     DT_EVENT
-------------------------
1      14-MAR-11 00:00:01
2      14-MAR-11 00:02:00
3      14-MAR-11 00:05:01
1      14-MAR-11 00:08:01
3      14-MAR-11 00:22:00
1      14-MAR-11 15:00:01
1      14-MAR-11 15:15:01

我需要按 ID 和 + 时间间隔进行分组,比方说,从 ID 的第一个事件开始 20 分钟。像这样的东西:

EV_GROUP    ID      DT_FIRST_EVENT      DT_LAST_EVENT          N_EVENTS
-----------------------------------------------------------------------
1           1       14-MAR-11 00:00:01  14-MAR-11 00:08:01        2
2           2       14-MAR-11 00:02:00  14-MAR-11 00:02:00        1
3           3       14-MAR-11 00:05:01  14-MAR-11 00:22:00        2
4           1       14-MAR-11 15:00:01  14-MAR-11 15:15:01        2

我不确定如何为该 dt 间隔设置组子句。对此有什么想法吗?

最佳答案

SELECT  id, diff, MIN(dt_event), MAX(dt_event)
FROM    (
        SELECT  t.*,
                TRUNC((dt_event - FIRST_VALUE(dt_event) OVER (PARTITION BY id ORDER BY dt_event)) * 86400 / 1200) AS diff
        FROM    mytable t
        )
GROUP BY
        id, diff

关于SQL - 按 ID 分组和从变量起点开始的时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662133/

相关文章:

甲骨文 : Materialized view not working when Using LEFT JOIN

sql - Ora-04072 : INVALID TRIGGER TYPE

php - PHP 5.2.14 的日期时间::CreateFromFormat

MongoDB 时区

sql - 在 SQL 查询中对月份名称进行排序

mysql - SQL Group by Subquery 被忽略

mysql - 将 Excel 中的数据替换为 Access 2007

Java JDBC MySQL连接错误: ClassNotFoundException

sql - 给定时间间隔内的汇总函数

mysql - 如何比较 MySQL 中的日期?