【问题标题】:SQL Excluding data based on certain criteria for a date rangeSQL 根据日期范围的特定条件排除数据
【发布时间】:2022-11-18 03:46:57
【问题描述】:

How to exclude records with certain values in sql select

我需要排除存在视频或面对面的整个月份,但保留未找到其中任何一个选项的月份。我正在使用有效的 NOT EXISTS 但是当我根据日期范围进行过滤时,它排除了所有内容,因为它在日期范围内的某处找到了一个实例

C1 c2 c3
149000 2022-06-21 00:00:00.000 Telephone
149000 2022-06-21 00:00:00.000 Video
149000 2022-06-24 00:00:00.000 Telephone
149000 2022-07-08 00:00:00.000 Telephone
149000 2022-07-15 00:00:00.000 Telephone
149000 2022-07-22 00:00:00.000 Telephone
149000 2022-07-29 00:00:00.000 Telephone
149000 2022-08-12 00:00:00.000 Telephone
149000 2022-08-26 00:00:00.000 Telephone
149000 2022-09-01 00:00:00.000 Face-to-Face
149000 2022-09-01 00:00:00.000 Face-to-Face
149000 2022-09-12 00:00:00.000 Telephone
149000 2022-09-12 00:00:00.000 Video

两条注释行是测试行,用于查看它对我的结果有何影响。

SELECT 
    c1
    ,c2
    ,C3

FROM  a1

WHERE
not exists (SELECT * FROM a1 as B WHERE b.c1 = a1.c1 and (b.c3= 'Face-to-Face' or b.c3 = 'Video') )
--and a1.c2 between '2022-06-01' and '2022-06-30')    
--and a1.c2 = b.c2)

and c2 between '2022-01-01' and '2022-12-30'

【问题讨论】:

    标签: sql intersystems-cache


    【解决方案1】:

    也许是这样的?

    select main.* 
    from a1 main
    where extract(month from main.c2) not in(
        select extract(month from sub.c2)
        from a1 sub
        where sub.c3 in ('Video', 'Face-to-Face')
    )
    

    【讨论】:

    • Extract 在 SMSS 或 Cache 中不起作用,但它给了我使用 MONTH(date-expression) 的想法。我看看会发生什么。
    【解决方案2】:

    这似乎有效:

        SELECT 
        c1
        ,c2
        ,C3
    FROM  a1
    WHERE DATEPART(MONTH, c2) not in  
        (select DATEPART(MONTH, c2) from a1 where c3 in ('Video', 'Face-to-Face'))
    

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多