日期比较以查找缺失的日期

问题描述 投票:0回答:1

我正在尝试比较日期以查找某人不再符合资格的时间。在此示例中,他们在 2023 年 10 月 1 日至 2023 年 10 月 19 日期间不符合资格。因此,9/30/23 exp_date 变为 10/20/23 eff_date。我如何找到该范围?谢谢。

enter image description here

CREATE TABLE ADMITS
(
ID_NUM INT
,AUTH_EFF_DATE  date null
,AUTH_EXP_DATE  date null
,MEM_EFF_DATE   date null
,MEM_EXP_DATE date null

)

INSERT INTO ADMITS (ID_NUM,AUTH_EFF_DATE,AUTH_EXP_DATE,MEM_EFF_DATE,MEM_EXP_DATE)
VALUES
 (118206307, '1/2/2023', '6/7/2023', '4/22/2022', '9/30/2023')
,(118206307, '8/30/2023', '2/17/2024', '4/22/2022', '9/30/2023')
,(118206307, '1/2/2023', '6/7/2023', '10/20/2023', '12/31/9999')
,(118206307, '8/30/2023', '2/17/2024', '10/20/2023', '12/31/9999')
;

从此我想将该日期范围与 auth_eff_date 和 auth_exp_date 进行比较,以显示哪些身份验证范围缺少资格。我认为可能领先或滞后,但不确定如何或是否正确。

sql sql-server datetime
1个回答
0
投票
WITH Previous as
(  
 SELECT *,LAG(MEM_EXP_DATE) OVER(PARTITION BY ID_NUM ORDER BY MEM_EFF_DATE,AUTH_EFF_DATE)  as PrevExprDate
 FROM ADMITS
)
SELECT *
  ,  CASE 
     WHEN PrevExprDate IS NULL THEN NULL 
     WHEN PrevExprDate = '12/31/9999' THEN '12/31/9999'
     ELSE DateAdd(day, 1, PrevExprDate) END as StartNoteligible
  ,  CASE 
     WHEN MEM_EFF_DATE IS NULL THEN NULL 
     WHEN MEM_EFF_DATE = '12/31/9999' THEN '12/31/9999'
     ELSE DateAdd(day, -1, MEM_EFF_DATE) END as EndNoteligible
FROM Previous

小提琴

ID_NUM AUTH_EFF_DATE AUTH_EXP_DATE MEM_EFF_DATE MEM_EXP_DATE 上期日期 开始注意资格 结束注意符合条件
118206307 2023-01-02 2023-06-07 2022-04-22 2023-09-30 2022-04-21
118206307 2023-08-30 2024-02-17 2022-04-22 2023-09-30 2023-09-30 2023-10-01 2022-04-21
118206307 2023-01-02 2023-06-07 2023-10-20 9999-12-31 2023-09-30 2023-10-01 2023-10-19
118206307 2023-08-30 2024-02-17 2023-10-20 9999-12-31 9999-12-31 9999-12-31 2023-10-19
© www.soinside.com 2019 - 2024. All rights reserved.