首页 > 解决方案 > ORA-00936: 缺少表达式,仅在日期时间列上按日期分组

问题描述

我有一个类似列的表:

CREATED_DATE DATE

我的查询如:

SELECT ACCOUNT, SUM(TOTAL), CREATED_DATE
FROM RKAP_REALISASI
WHERE ACCOUNT = '21157' AND CREATED_DATE BETWEEN TO_DATE('9/5/2018', 'MM/DD/YYYY') AND TO_DATE('10/31/2018','MM/DD/YYYY')
GROUP BY ACCOUNT, CREATED_DATE

这将按完整的 DateTime 分组,包括小时和分钟。我希望仅按日期 MM/DD/YYYY 进行分组,并对其进行一些 SUM,而不是按 MM/DD/YYYY/hh/mm/ss。

到目前为止,我已经尝试过:

SELECT ACCOUNT, SUM(TOTAL), DATE(CREATED_DATE)
FROM RKAP_REALISASI
WHERE ACCOUNT = '21157' AND CREATED_DATE BETWEEN TO_DATE('9/5/2018', 'MM/DD/YYYY') AND TO_DATE('10/31/2018','MM/DD/YYYY')
GROUP BY ACCOUNT, DATE(RKAP_REALISASI.CREATED_DATE)

但它失败了,ORA-00936:缺少表达式。

有谁知道如何做到这一点?谢谢。

标签: sqloracle

解决方案


您可以使用TRUNC函数仅获取日期而不是小时、分钟、秒。

SELECT account, SUM(total), TRUNC(created_date)
FROM rkap_realisasi
WHERE account = '21157' 
    AND TRUNC(created_date) BETWEEN TO_DATE('9/5/2018', 'MM/DD/YYYY') AND TO_DATE('10/31/2018','MM/DD/YYYY')
GROUP BY account, TRUNC(created_date)
ORDER BY account, TRUNC(created_date);

推荐阅读