我已经创建了代表以下内容的示例数据(实际数据库中每条记录大约有30个字段,该表中有60k条记录)

Customer_ID CaseType CaseStatus DateOpened DateClosed
100 Letter Letter 01/01/2023 01/03/2023
100 Call Call 01/02/2023 01/04/2023
200 Letter Letter 01/01/2023 01/03/2023

例如,我需要返回符合以下条件的所有"Customer_ID":

  • "CaseType = Letter"
  • "DateClosed = 01/03/2023" 除非存在匹配的具有"CaseType = Call"的"Customer_ID",而不考虑任何其他字段.

所以基本上从上面我只有一个记录结束,那就是"Customer_ID = 200",因为它有"CaseStatus='Letter'",没有匹配的调用,它在2023年1月3日关闭.

以下是我try 过的:

SELECT DISTINCT Customer_ID 
WHERE CaseType = 'Letter' AND DateClosed = '01/03/2023' 

这显然会同时返回IF和200,但我不能计算出"除非匹配Customer_ID和CaseType=Call"部分.我猜它可能涉及IF命令,或者NOT IF(如果真的存在的话).

如有任何指示或协助,我们将不胜感激.

推荐答案

您可以对子查询执行此操作:

SELECT DISTINCT
    Customer_ID

FROM TABLE

WHERE CaseType = 'Letter'
    AND DateClosed = '01/03/2023'
    AND Customer_ID NOT IN (
        SELECT
             Customer_ID
        FROM TABLE
        WHERE CaseType = 'Call'
    )

这样一来,你就排除了所有Customer_ID分的CaseType = 'Call'分.

在SQL中,可以将IFNOT IF视为WHERE语句.

Sql相关问答推荐

有没有办法在每次计算每一行的数据时更新2个值?

如何在presto/SQL中使用两个数组列创建(分解)单独的行

你能过滤一个列表只返回多个结果吗?

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

PATINDEX中与[A-Z]匹配(U除外)的正则表达式

表函数的作用域和功能

违反了完整性约束-值存在时找不到父键

如何使用jsonn_populate_record()插入到包含IDENTITY列的表中

将时间戳四舍五入到最近 10 分钟的查询

当 2 列具有静态值并且第 3 列使用运算符 IN 时,对 PostgreSQL 和 3 列上的复杂索引的最佳查询

如何为给定的股票数据集计算利润/亏损,确保先卖出先买入的股票

在where语句中使用CTE非常缓慢

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

如何使用SQL将患者平均分配给他们所在地区的doctor

PostgreSQL中如何提取以特定字符开头的字符串中的所有单词?

比使用NOT EXISTS更高效的SQL删除方法是什么?

使用ALTER TABLE无法删除列

SQL 计数和过滤查询优化

奇怪的甲骨文行为

将单行中的多个行值转换为列