У меня есть следующий запрос, который возвращает список участников с их идентификатором и датами начала и окончания в качестве клиентов. Я пытаюсь как увидеть, есть ли разрыв в охвате их клиентов, так и покрыты ли они в настоящее время. Способ покрытия состоит в том, что каждый месяц существует строка, в которой говорится, что по состоянию на этот месяц они охватываются или не покрываются, поэтому каждый идентификатор имеет много строк. Я хочу закончить только одной строкой для идентификатора, которая содержит информацию о том, покрыты ли они в настоящее время и есть ли у них пробел в членстве
текущий код:
SELECT distinct ID,
location,
start_dt,
end_dt,
county,
city,
MBR_GAP,
case
when end_dt < DATE '2020-01-01' then 'N'
else 'Y' end as Covered_as_of_today
from (SELECT T2.*,
CASE
WHEN T2.DELTA_YEAR = 0 AND T2.DELTA_MONTH > 1 THEN 'Y'
WHEN T2.DELTA_YEAR > 1 THEN 'Y'
WHEN T2.DELTA_YEAR = 1 AND T2.DELTA_MONTH > -11 THEN 'Y'
ELSE 'N' END AS MBR_GAP,
(T2.YEAR - T2.DELTA_YEAR) AS PRE_YEAR,
(T2.MONTH - T2.DELTA_MONTH) AS PRE_MONTH,
CASE
WHEN LENGTH((T2.MONTH - T2.DELTA_MONTH)) = 1
THEN (T2.YEAR - T2.DELTA_YEAR) || '0' || (T2.MONTH - T2.DELTA_MONTH)
ELSE (T2.YEAR - T2.DELTA_YEAR) || (T2.MONTH - T2.DELTA_MONTH)
END AS PRE_CALENDAR,
(T2.DELTA_YEAR * 12 + T2.DELTA_MONTH) AS GAP_MONTHS
FROM (SELECT DISTINCT MBRSHP_MTH_NB,
ID,
location,
start_dt,
end_dt,
county,
city,
MED_CVRG_IN_CD,
YEAR,
MONTH,
YEAR - LAG(YEAR) OVER (PARTITION BY ID ,location ORDER BY MBRSHP_MTH_NB ) AS DELTA_YEAR,
MONTH - LAG(MONTH) OVER (PARTITION BY ID ,location ORDER BY MBRSHP_MTH_NB ) AS DELTA_MONTH
FROM (
select DISTINCT MBRSHP_MTH_NB,
location,
ID,
start_dt,
end_dt,
county,
city,
SUBSTR(Member_month, 1, 4) AS YEAR,
SUBSTR(MBRSHP_MTH_NB, 5, 2) AS MONTH,
MED_CVRG_IN_CD
from MEMBERS
where MEMBERS.ID in (1354468, 1354654
)
order by ID
) T1) T2)
, он выводит это:
ID location start_dt end_dt county city MBR_GAP covered_as_of_today
1354468 TY 01-OCT-19 31-DEC-19 Location A Location A-1 N N
1354468 TY 01-OCT-19 31-DEC-20 Location A Location A-1 N Y
1354468 TY 01-JAN-20 31-DEC-20 Location A Location A-1 N Y
1354654 TY 01-JAN-19 31-DEC-20 Location A Location A-2 N Y
1354654 TY 01-JAN-16 31-DEC-18 Location A Location A-2 N N
1354654 TY 01-JAN-16 31-DEC-20 Location A Location A-2 N Y
что я хочу:
ID location start_dt end_dt county city MBR_GAP covered_as_of_today
1354468 TY 01-JAN-20 31-DEC-20 Location A Location A-1 N Y
1354654 TY 01-JAN-19 31-DEC-20 Location A Location A-2 N Y
Я пытался добавить max для даты начала и окончания, но это дает тот же результат, я думаю, из-за других столбцов