我正在尝试比较日期以查找某人不再符合资格的时间。在此示例中,他们在 2023 年 10 月 1 日至 2023 年 10 月 19 日期间不符合资格。因此,9/30/23 exp_date 变为 10/20/23 eff_date。我如何找到该范围?谢谢。
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 进行比较,以显示哪些身份验证范围缺少资格。我认为可能领先或滞后,但不确定如何或是否正确。
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 |