首页 > 解决方案 > Oracle 按分钟而不是每天分组

问题描述

我写了一个查询来获取每天收到的数据。

alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
SELECT to_CHAR(created_date, 'yyyy/mm/dd'), status_code, COUNT(workflow_txn_id_log)
FROM workflow_txn_log
WHERE status_code = 'DOWNLOAD_ALL' AND created_date > '2021/08/11'
GROUP BY  to_CHAR(created_date, 'yyyy/mm/dd'), status_code
ORDER BY to_CHAR(created_date, 'yyyy/mm/dd');

现在我想获取关于按升序排序的每一分钟的数据。我试图更改日期格式,但没有任何效果。我怎么做?

标签: sqloraclegroup-byminute

解决方案


听起来你想要

SELECT trunc(created_date, 'mi') created_minute, 
       status_code, 
       COUNT(workflow_txn_id_log)
  FROM workflow_txn_log
 WHERE status_code = 'DOWNLOAD_ALL' 
   AND created_date > date '2021-08-11'
GROUP BY  trunc(created_date, 'mi'), status_code
ORDER BY  trunc(created_date, 'mi');

trunc(created_date, 'mi')返回date被截断为分钟的 a(即秒设置为 0)。这意味着order by将使用日期比较语义对日期进行排序,而不是您想要的字符串比较语义。该where子句created_date与 adate而不是字符串进行比较,这样您就不会进行隐式转换。


推荐阅读