首页 > 解决方案 > 如何 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 子句来检查所有总和。任何帮助表示赞赏!

标签: sqloracle

解决方案


您可以在 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;

推荐阅读