如何从 SQL 中的一组行中 select 特定行

How to select a specific row from a set of rows in SQL

我需要 select 来自“一组”录取数据的特定行。我花了一些时间来尝试理解这个过程,我将尝试用一个例子来解释我需要实现的目标。

所以,在下面,我有一个特定会员入院和再入院的历史。我们可以将图像中的以下行分类为不同的录取集。

每一次新入会都会得到一个 CLM_NBR 并且如果该成员由于某些原因再次入会,作为上一次入会的后续行动,初始 [=] 的 READMIT_CLM_NBR 63=]等于CLM_NBR的新的,相关的重新入场。我们称一组中的第一个入场为原始入场。

如果一次录取没有再次录取,READMIT_CLM_NBR 将是 NULL

招生组如下:

录取组1:排号4

录取组2:第6、7、8行

录取组3 : 排号5, 1, 3, 2

现在,我需要在最后一个录取集(录取集3)中获取原始录取的DATE_ADMITTED。突出显示的行是我们需要的行,查询应该 return 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';

查询然后 returns 以下结果...

2

我需要从突出显示的行中获取日期。关于如何做到这一点有什么想法吗?

你应该可以通过找到所有不属于 READMIT_CLM_NBRCLM_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

如果我没看错,你可以使用 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
    )