sql - ORACLE SQL:按天时间和金额总和分组的每小时日期
问题描述
我有以下情况:
ID DATE_TIME AMOUNT
23 14-MAY-2021 10:47:01 5
23 14-MAY-2021 11:49:52 3
23 14-MAY-2021 12:03:18 4
如何获得金额的总和并按天而不是按小时计算 DATE?
例子:
ID DATE_TIME TOTAL
23 20210514 12
我尝试过这种方式,但出现错误:
SELECT DISTINCT ID, TO_CHAR(DATE_TIME, 'YYYYMMDD'), SUM(AMOUNT) AS TOTAL FROM MY_TABLE
WHERE ID ='23' AND DATE_TIME > SYSDATE-1
GROUP BY TOTAL, DATE_TIME
解决方案
如果您使用 GROUP BY,则不需要 DISTINCT - 分组的任何内容都必须是不同的,除非它稍后加入其他内容导致它再次重复
你也快到了
SELECT ID, TO_CHAR(DATE_TIME, 'YYYYMMDD') AS DATE_TIME, SUM(AMOUNT) AS TOTAL
FROM MY_TABLE
WHERE ID ='23' AND DATE_TIME > SYSDATE-1
GROUP BY ID, TO_CHAR(DATE_TIME, 'YYYYMMDD')
您需要按函数的输出而不是输入进行分组。并非每个数据库都可以在选择中使用 GROUP BY 别名(从技术上讲,在 GROUP 完成时 SELECT 尚未完成,因此别名还不存在,并且您不会按总数分组,因为这是一个聚合(结果总结组中的每个不同的值)
如果您需要对该日期进行进一步处理,请不要将其转换为字符串。使用 TRUNC 缩短时间:
SELECT ID, TRUNC(DATE_TIME) as DATE_TIME, SUM(AMOUNT) AS TOTAL
FROM MY_TABLE
WHERE ID ='23' AND DATE_TIME > SYSDATE-1
GROUP BY ID, TRUNC(DATE_TIME)
TRUNC 可以将日期缩减到其他部分,例如 TRUNC(DATE_TIME, 'HH24') 将删除分钟和秒,但保留小时
推荐阅读
- drupal - 试图从drupal gt获取非对象的属性
- python - 找到与文件中的时间戳更接近的时间戳
- microservices - 使用 URL 调用 feign 客户端
- sql - SQL Left Join on Criteria between dates?
- ios - react-native-maps fitToSuppliedMarker/fitToCorodinates 不显示所有标记
- c# - Collectoiview.Filter 不过滤数据
- ios - 如何在 MKMapView Swift 上动画 MKOverlay 的移动
- authentication - Safari 12 和“防止跨站跟踪”模式
- selenium-webdriver - selenium - 使用 count 函数编写 xpath
- python-3.x - i-graph-python 参数等效于 networkx 中的 pos