我需要从准入数据的“集合”中选择特定的行。我花了一些时间来尝试理解该过程,并尝试通过一个示例来解释我需要实现的目标。
因此,在下面,我有特定成员入院和再入院的历史。我们可以将图像中的以下行分类为不同的准入集。
每项新的录取都会被授予CLM_NBR
,如果出于某种原因重新注册该成员,则作为前一次录取的后续措施,初始录入/重新录取的READMIT_CLM_NBR
接纳等于新的相关重新接纳的CLM_NBR
。我们称集合的第一个入场为原始入场。
如果录取没有重新录取,则READMIT_CLM_NBR
将是NULL
。
录取集如下:
准入组1 :行号4
准入组2 :第6、7、8行
准入组3 :第5、1、3、2行
现在,我需要在最后一个接纳集(接纳集3)中获得原始接纳的DATE_ADMITTED
。突出显示的行是我们需要的行,查询应返回2016-05-18
作为值。我试图找出一种按日期进行分区或分组的方法,但是似乎没有任何效果。
由于我们只关心是否有相应的重新入场,因此可以丢弃所有带有NULL READMIT_CML_NBR
的行。查询应如下所示:
select READMIT_CLM_NBR, CLM_NBR, DATE_ADMITTED
from P_Admission
where READMIT_CLM_NBR in (select distinct CLM_NBR from P_Admission) and MBR_ID = '0610297305';
查询然后返回以下结果...
我需要从突出显示的行中获取日期。关于如何做到的任何想法?
答案 0 :(得分:1)
您应该能够通过找到所有CLM_NBR
而不是READMIT_CLM_NBR
的值来获得所需的结果(因此它们是原始准入);然后可以按DATE_ADMITTED
对这些行进行排序,并选择最近日期的行:
WITH CTE AS (
SELECT READMIT_CLM_NBR, CLM_NBR, DATE_ADMITTED,
ROW_NUMBER() OVER (ORDER BY DATE_ADMITTED DESC) AS rn
FROM P_Admission p1
WHERE MBR_ID = '0610297305'
AND NOT EXISTS (SELECT * FROM P_Admission p2 WHERE p2.READMIT_CLM_NBR = p1.CLM_NBR)
)
SELECT READMIT_CLM_NBR, CLM_NBR, DATE_ADMITTED
FROM CTE
WHERE rn = 1
演示(适用于MySQL 8,但适用于通用SQL)on db-fiddle
答案 1 :(得分:1)
如果我正确遵循此操作,则可以使用not exists
:
select max(date_admitee)
from p_admission pa
where
mbr_id = '0610297305'
and readmit_clm_nbr is not null
and not exists (
select 1
from p_admission pa1
where pa1.readmit_clm_nbr = pa.clm_nbr
)