【发布时间】:2021-10-27 21:16:09
【问题描述】:
我有一个表,其中包含生成的两列和时间戳。它记录每分钟的数据,生产者表示每分钟生产的盒子数量。如果我想每 5 分钟计算一次产量,我该如何对时间戳列进行分组并得到总和。有什么建议吗?
【问题讨论】:
-
请提供足够的代码,以便其他人更好地理解或重现问题。
标签: oracle
我有一个表,其中包含生成的两列和时间戳。它记录每分钟的数据,生产者表示每分钟生产的盒子数量。如果我想每 5 分钟计算一次产量,我该如何对时间戳列进行分组并得到总和。有什么建议吗?
【问题讨论】:
标签: oracle
假设您的时间列是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
【讨论】: