首页 > 解决方案 > 查询具有不同条件的同一列 - 组

问题描述

我有一个这样的事务表:

  acct_id      trans_type         date_of_tran
-------------------------------------------------
     A          WITHDRAW          2021-Jun-20
     A          DEPOSIT           2021-Jun-21
     A          DEPOSIT           2021-Jun-22 

     B          WITHDRAW          2021-Jun-20
     B          WITHDRAW          2021-Jun-21

     C          DEPOSIT           2021-Jun-20
     C          DEPOSIT           2021-Jun-21
     C          WITHDRAW          2021-Jun-21
     C          WITHDRAW          2021-Jun-21

我想找出哪些账户只提款但在特定时间段内没有存入任何钱。

示例 - 账户 B 仅提款 - 6 月 20 日至 21 日没有存款

强文本

标签: sqlpostgresql

解决方案


您可以计算每个帐户 ID 的行数,并将其与 WITHDRAW 行数进行比较。如果它们相同,则该帐户只有提款

SELECT acct_id 
FROM transaction
WHERE date_of_tran BETWEEN '2021-06-20' AND '2021-06-21'
GROUP BY acct_id
HAVING COUNT(*) = COUNT(CASE WHEN trans_type = 'WITHDRAW' THEN 1 END)

一个用于测试的 SQLfiddle。


推荐阅读