mysql 如何获取客户总余额达到0的所有日期

iqxoj9l9  于 2023-03-28  发布在  Mysql
关注(0)|答案(2)|浏览(137)

我有一个表如下所示。它由许多客户组成(为了简单起见,这里只显示一个客户James),这些客户可以有许多帐户。每个帐户每天都有余额。我的目标是获得每个客户的所有日期,其中总余额(所有帐户)为0
让我们来看看这个场景。记录从2017年1月1日开始,James有3个活跃账户,余额为44,56,928。第二天2017年1月2日,他的账户2余额变为0。第二天3日,他的账户1和3也变为0,因此在3日,他的总余额第二天4号,他的账户2余额回到435。然后在5号,它回到0,他的TOTAL余额现在,在6日,他具有余额为64的新账户#4。第二天,在7日,该账户#4变为0,并且他的总余额(在所有账户中)再次变为0。
| 客户服务|账号|日期|余额|
| --------------|--------------|--------------|--------------|
| 詹姆斯|1|2017年1月1日|四十四|
| 詹姆斯|二|2017年1月1日|五十六|
| 詹姆斯|三|2017年1月1日|九二八|
| 詹姆斯|1|2017年1月2日|四十四|
| 詹姆斯|二|2017年1月2日|0|
| 詹姆斯|三|2017年1月2日|九二八|
| 詹姆斯|1|2017年3月1日|0|
| 詹姆斯|二|2017年3月1日|0|
| 詹姆斯|三|2017年3月1日|0|
| 詹姆斯|1|2017年4月1日|0|
| 詹姆斯|二|2017年4月1日|四三五|
| 詹姆斯|三|2017年4月1日|0|
| 詹姆斯|1|2017年5月1日|0|
| 詹姆斯|二|2017年5月1日|0|
| 詹姆斯|三|2017年5月1日|0|
| 詹姆斯|1|2017年6月1日|0|
| 詹姆斯|二|2017年6月1日|0|
| 詹姆斯|三|2017年6月1日|0|
| 詹姆斯|四|2017年6月1日|六十四|
| 詹姆斯|1|2017年1月7日|0|
| 詹姆斯|二|2017年1月7日|0|
| 詹姆斯|三|2017年7月1日|0|
| 詹姆斯|四|2017年1月7日|0|
因此,SQL查询的输出应该如下所示(针对每个客户,而不仅仅是James)
| 客户服务|日期归零余额|
| --------------|--------------|
| 詹姆斯|2017年3月1日|
| 詹姆斯|2017年5月1日|
| 詹姆斯|2017年1月7日|
我有下面的代码,但它不看总余额为0。它显示的日期时,余额为每个帐户为0,这不是我想要的:

WITH cte AS (
SELECT
    customer                   
    , account                       
    , date                   
    , balance      
    , LAG(balance) OVER (PARTITION BY customer, account ORDER BY date) AS prev_bal
FROM table
)
 
SELECT customer, account, date
FROM cte
WHERE balance = 0 AND prev_bal > 0;
ebdffaop

ebdffaop1#

试试这个:

SELECT customer
      ,date
      ,SUM(Balance)
FROM customer_account
GROUP BY customer
        ,date
HAVING SUM(Balance) = 0

下面是fiddle

SELECT customer
      ,date AS Date_Zero_Bal
FROM customer_account
GROUP BY customer
        ,date
HAVING SUM(Balance) = 0

WITH DataSource AS
(
    SELECT customer
           ,date
           ,SUM(Balance) AS Balance
           ,ROW_NUMBER() OVER (PARTITION BY customer ORDER BY date) as row_id
    FROM customer_account
    GROUP BY customer
            ,date

)
SELECT DS1.customer
      ,DS1.date
FROM DataSource DS1
INNER JOIN DataSource DS2
   ON DS1.customer = DS2.customer
   AND DS1.row_id - 1 = DS2.row_id
WHERE DS1.Balance = 0
   AND DS2.Balance > 0
hlswsv35

hlswsv352#

您需要建立每天所有客户帐户的总和,即:

SELECT
   customer, date, SUM(balance)
FROM
   table
GROUP BY
   customer, date

有了这张table,你可以轻松地继续前进。

相关问题