Oracle SQL 组行计数按 10 分钟的时间间隔

新手上路,请多包涵

我在 oracle 中有一个表,其中包含如下数据

created_date 详细信息
2016 年 1 月 1 日 04:45 abcd
2016 年 1 月 1 日 04:47
2016 年 1 月 1 日 04:53
2016 年 1 月 1 日 04:54
01-Jan-16 04:58 qrst

….ETC

我希望能够每 10 分钟计算一次表中的行数,例如

时间计数
04:40 2
04:50 3

创建日期 = 时间戳,详细信息 = varchar

我该怎么做?

谢谢

原文由 woodplease 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
1 个回答

如果您想根据实际时间戳值进行分组,这是一个解决方案:

 create table test_10_minutes_group_by (created_date timestamp, details varchar2(4));

insert into test_10_minutes_group_by values (systimestamp, 'aaa'); -- current time
insert into test_10_minutes_group_by values (systimestamp - 1/24/60, 'bbb'); -- 1 minute ago
insert into test_10_minutes_group_by values (systimestamp - 1/24/60 * 10, 'ccc'); -- 10 minutes ago
insert into test_10_minutes_group_by values (systimestamp - 1/24/60 * 20, 'ccc2'); -- 20 minutes ago
insert into test_10_minutes_group_by values (systimestamp - 1/24/60 * 25, 'abc');  -- 25 minutes ago
insert into test_10_minutes_group_by values (systimestamp - 1/24/60 * 30, 'xyz'); -- 30 minutes ago
insert into test_10_minutes_group_by values (systimestamp - 1/24/60 * 35, 'xyz2'); -- 35 minutes ago

select
    actual_time,
    to_char(actual_time, 'hh24:mi:ss') pretty_date,
    count(1)
  from (
    select
        trunc(created_date, 'mi') /*remove seconds*/ -  1/24/60 * mod(extract (minute from created_date), 10) /*substract units digit from minutes*/ actual_time,
        details
      from
        test_10_minutes_group_by
  )
  group by actual_time;

原文由 Emil Moise 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进