[英]How to GROUP BY date,id By checking overall sum of transactions in 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
更新:
您需要使用解析 function 如下:
Select * from
(Select t.*, sum(OBOROT) over (partition by client_code, CODE_FILIAL) as sm
From (<your_existing_query>) t)
Where sm >= 1000000000;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.