sql - 如何 GROUP BY date,id 通过检查 ORACLE 中的总交易量
问题描述
我想使用 client_code、date 和 filial 按表分组。但我还需要检查给定日期之间的总体营业额总和。client_code = substr(CODE_ACCOUNT, 10, 8)
表ACCOUNT_TABLE
------------------------------------------------------------------------------
CODE_FILIAL | OPER_DAY | CODE_ACCOUNT | CREDIT |
------------------------------------------------------------------------------
00825 | 2020-01-02 12:32:22 |20210000700123343001 | 124544112 |
00825 | 2020-02-23 21:45:00 |20210000700123343001 | 523553452.23 |
00825 | 2020-02-23 21:45:00 |20212000700224543001 | 245565345.23 |
00825 | 2020-02-10 09:18:00 |20212000700224543001 | 987565345.23 |
00825 | 2020-03-21 14:45:00 |20212000700253374001 | 100053523.23 |
00825 | 2020-04-03 18:45:00 |20212000700123343001 | 133354523.23 |
00825 | 2020-05-18 23:00:00 |20210000700123343001 | 892334523.23 |
低于我到目前为止所尝试的
SELECT substr(CODE_ACCOUNT, 10, 8) AS CLIENT_CODE,CODE_ACCOUNT,oborot,mnth,CODE_FILIAL FROM (
SELECT CODE_ACCOUNT,sum(CREDIT)/100 as oborot,to_char(s.OPER_DAY, 'YYYY-MM') AS mnth,CODE_FILIAL
FROM ACCOUNT_TABLE s
WHERE s.OPER_DAY >= to_date('01.01.2020', 'DD.MM.YYYY')
AND s.OPER_DAY < to_date('01.07.2020', 'DD.MM.YYYY')
AND s.CODE_FILIAL in ('00820','00825')
AND substr(s.CODE_ACCOUNT, 1, 8) IN ('20208000','20210000','20212000')
GROUP BY CODE_ACCOUNT,to_char(s.OPER_DAY, 'YYYY-MM'),s.CODE_FILIAL
) rs ORDER BY rs.oborot DESC
我拿的结果:
CLIENT_CODE | CODE_ACCOUNT | OBOROT | MNTH | CODE_FILIAL|
-----------------------------------------------------------------------------------
00123343 | 20210000900123343001 | 124544112 | 2020-01 | 00825 |
00123343 | 20210000900123343001 | 523553452.23 | 2020-02 | 00825 |
00123343 | 20212000700123343001 | 133354523.23 | 2020-04 | 00825 |
00123343 | 20210000900123343001 | 892334523.23 | 2020-05 | 00825 |
00224543 | 20212000700224543001 | 1233130690.46 | 2020-02 | 00825 |
00253374 | 20212000700253374001 | 100053523.23 | 2020-03 | 00825 |
在这种情况下,我试图花 6 个月的时间。如您所见,我不需要最后的数据。因为它小于1000000000。我希望在 6 个月内的一个 client_code 总和大于1000000000数字。
我想要的结果
CLIENT_CODE | CODE_ACCOUNT | OBOROT | MNTH | CODE_FILIAL|
-----------------------------------------------------------------------------------
00123343 | 20210000900123343001 | 124544112 | 2020-01 | 00825 |
00123343 | 20210000900123343001 | 523553452.23 | 2020-02 | 00825 |
00123343 | 20212000700123343001 | 133354523.23 | 2020-04 | 00825 |
00123343 | 20210000900123343001 | 892334523.23 | 2020-05 | 00825 |
00224543 | 20212000700224543001 | 1233130690.46 | 2020-02 | 00825 |
在上面的结果中client_code = 00253374没有被采用,因为 oborot summa 小于1000000000。总而言之,我需要在某处添加 WHERE 子句来检查所有总和。任何帮助表示赞赏!
解决方案
您可以在 yoir 内部查询中使用 having 子句,如下所示:
GROUP BY CODE_ACCOUNT,to_char(s.OPER_DAY, 'YYYY-MM'),s.CODE_FILIAL
Having sum(CREDIT)/100 >= 1000000000
更新:
您需要按如下方式使用解析函数:
Select * from
(Select t.*, sum(OBOROT) over (partition by client_code, CODE_FILIAL) as sm
From (<your_existing_query>) t)
Where sm >= 1000000000;
推荐阅读
- node.js - 尝试搜索具有关联多对多续集的实体
- docker - Docker 镜像构建以悬空镜像结束
- python - 路由到从下拉列表中单击的页面
- sockets - 我正在尝试在不使用套接字的情况下使用 GET,但我不断收到 400 Bad Request
- kotlin - 从 RecyclerView 适配器内部访问 AlarmManager
- reactjs - 如何在 ReactJs 应用程序中读取 Spring Boot application.properties?
- python - tkinter 中的“鼠标悬停”事件
- mysql - 如何在MySQL中检查X是否是Y的孩子,反之亦然?
- macos - Lua Mac os.execute 打开终端并运行命令
- c - 如何将列表的两个元素复制到一个更大的元素中?