首页 > 解决方案 > 显示继续日期 -SQL

问题描述

我怎样才能让所有拥有代码(14 ,13)的人整整一个月

IDNR 代码 开始日期 结束日期       
 16 13 2021-01-07 2021-01-21
 16 13 2021-01-22 2021-01-31
 17 13 2021-01-01 2021-01-01
 17 12 2021-01-02 2021-01-14
 17 14 2021-01-15 2021-01-31
 18 14 2021-01-01 2021-01-19
 18 13 2021-01-20 2021-01-29
 18 14 2021-01-30 2021-01-31

我想要的结果是:

IDNR 代码 开始日期 结束日期       
 16 13 2021-01-07 2021-01-21
 16 13 2021-01-22 2021-01-31
 18 14 2021-01-01 2021-01-19
 18 13 2021-01-20 2021-01-29
 18 14 2021-01-30 2021-01-31

我选择( idnr=16 , idnr=18 )作为结果,因为我想要的 CODE 13、CODE 14 以及开始日期和结束日期涵盖了整个 1 月(整个月 2021-01-01 到 2021-01-31)* *抱歉重复我的问题,但我昨天删除了它,因为它不太好**

标签: sql

解决方案


您可以使用not exists

select t.*
from t
where t.end_date >= '2021-01-01' and
      t.start_date < '2021-02-01'
      not exists (select 1
                  from t t2
                  where t2.idnr = t.idnr and
                        t2.code not in (13, 14) and
                        t2.end_date >= '2021-01-01' and
                        t2.start_date < '2021-02-01'
                 )

推荐阅读