SELECT TRUNC("DATE", 'MI')
- MOD(EXTRACT(MINUTE FROM CAST("DATE" AS TIMESTAMP)), 3)
* INTERVAL '1' MINUTE AS date_grp,
COUNT(*)
FROM table_name
GROUP BY
TRUNC("DATE", 'MI')
- MOD(EXTRACT(MINUTE FROM CAST("DATE" AS TIMESTAMP)), 3)
* INTERVAL '1' MINUTE;
其中,对于样本数据(每分钟间隔10行):
CREATE TABLE table_name (work_order, "DATE") AS
SELECT LEVEL, TRUNC(SYSDATE) + INTERVAL '1' MINUTE * LEVEL
FROM DUAL
CONNECT BY LEVEL <= 10;
1条答案
按热度按时间bksxznpy1#
例如,如果,如果要计算每三分钟内的工作单数量,则可以将
DATE
列截断到分钟的开始(将秒分量归零),然后减去分钟分量模3(这是因为一个小时中有3分钟的确切倍数,所以您不必担心与小时边界重叠)在每三分钟间隔开始时获取DATE
;然后你可以GROUP BY
它并聚合:其中,对于样本数据(每分钟间隔10行):
输出:
| 日期_GRP| COUNT(*)|
| --------------|--------------|
| 2023-05-16 00:00:00|二|
| 2019 -05-16 00:03:00|三|
| 2019 -05-16 00:06:00|三|
| 2019 -05-16 00:00:00|二|
DATE
是保留字,不能用作无引号标识符;您要么需要为列使用不同的标识符,要么在使用标识符的所有地方使用带引号的标识符。*fiddle