【问题标题】:Grouping based on time stamp in oracleoracle中基于时间戳的分组
【发布时间】:2021-10-27 21:16:09
【问题描述】:

我有一个表,其中包含生成的两列和时间戳。它记录每分钟的数据,生产者表示每分钟生产的盒子数量。如果我想每 5 分钟计算一次产量,我该如何对时间戳列进行分组并得到总和。有什么建议吗?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: oracle


【解决方案1】:

假设您的时间列是TIMESTAMP 数据类型,您可以使用:

SELECT timestamp - INTERVAL '1' MINUTE * MOD(EXTRACT(MINUTE FROM timestamp), 5)
         AS five_minute_time_range,
       SUM(boxes_per_minute)
FROM   table_name
GROUP BY
       timestamp - INTERVAL '1' MINUTE * MOD(EXTRACT(MINUTE FROM timestamp), 5)
ORDER BY
       five_minute_time_range

其中,对于样本数据:

CREATE TABLE table_name (timestamp, boxes_per_minute) AS
SELECT TIMESTAMP '2021-01-01 00:00:00' + (LEVEL - 1) * INTERVAL '1' MINUTE,
       LEVEL
FROM   DUAL 
CONNECT BY LEVEL <= 30;

输出:

FIVE_MINUTE_TIME_RANGE SUM(BOXES_PER_MINUTE)
01-JAN-21 00.00.00.000000000 15
01-JAN-21 00.05.00.000000000 40
01-JAN-21 00.10.00.000000000 65
01-JAN-21 00.15.00.000000000 90
01-JAN-21 00.20.00.000000000 115
01-JAN-21 00.25.00.000000000 140

如果是DATE 列,那么您可以使用:

SELECT datetime - INTERVAL '1' MINUTE * MOD((datetime - TRUNC(datetime)) * 24 * 60, 5)
         AS five_minute_time_range,
       SUM(boxes_per_minute)
FROM   table_name
GROUP BY
       datetime - INTERVAL '1' MINUTE * MOD((datetime - TRUNC(datetime)) * 24 * 60, 5)
ORDER BY
       five_minute_time_range

db小提琴here

【讨论】:

    猜你喜欢
    • 2021-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2013-11-24
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多