繁体   English   中英

如何按日期分组,ID 通过检查 ORACLE 中的交易总额

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM