【发布时间】:2021-11-03 18:27:44
【问题描述】:
此查询有一些要求。基本思想是,对于每个帐户,在感兴趣的子帐户之后拉下一个 admission_date 和相应的discharge_date。如果没有唯一的下一个 admission_date,请指明“No Readmit”。
我知道 StackOverflow 不鼓励使用图片,但我觉得视觉辅助很有帮助。感兴趣的帐户是 AAA、BBB、CCC 和 DDD,感兴趣的子帐户是 121、214、315、414 和 416。请注意,CCC 没有下一个唯一的 admission_date(将是“No Readmit”),DDD 有两个子帐户具有下一个唯一的 admission_dates 的兴趣,并且子帐户不一定按数字顺序排列(即 BBB 从 221 开始,到 216 结束)。所以改变这个:
到这里:
这里是设置代码:
CREATE TABLE random_table
(
account VarChar(50),
subaccount VarChar(50),
admit_date DATETIME,
discharge_date DATETIME
);
INSERT INTO random_table
VALUES
('AAA',111,6/20/2021,6/25/2021),
('AAA',121,6/20/2021,6/25/2021),
('AAA',131,7/1/2021,7/3/2021),
('AAA',141, 8/2/2021, 8/5/2021),
('BBB',216,4/1/2021,4/3/2021),
('BBB',213,4/1/2021,4/3/2021),
('BBB',221,4/1/2021,4/3/2021),
('BBB',215,4/1/2021,4/3/2021),
('BBB',216,4/5/2021,4/10/2021),
('CCC',313,11/1/2020,11/5/2020),
('CCC',314,11/15/2020,11/17/2020),
('CCC',315,12/23/2020,12/24/2020),
('CCC',316,12/23/2020,12/24/2020),
('DDD',414,7/1/2021,7/3/2021),
('DDD',412,7/6/2021,7/7/2021),
('DDD',416,8/1/2021,8/5/2021),
('DDD',417,8/10/2021,8/15/2021)
为了解决这个问题,我一直在尝试使用 row_numbers() 的组合来标记每个 admission_date(由帐户分区)的第一个新实例,以及 CTE 来选择那些相关的行。但显然还没有。有什么建议?这是我所拥有的:
select
cte2.*
,case when cte2.subaccount in (111,121,131,141,216,213,221,215,216,313,314,315,316,414,412,416,417
) then lead(cte2.admit_date) over (order by cte2.account, cte2.row_nums)
else null
end second_admit
from (
select
cte.*
,row_number() over (partition by cte.account order by cte.row_num) row_nums
from (
select distinct
hsp.subaccount
,row_number() over (partition by pat.account, hsp.admit_date order by pat.account) row_num
,case when row_number() over (partition by pat.account,hsp.admit_date order by pat.account) =1 then 'New Admit' else null end new_admit
,convert(varchar,hsp.admit_date,101) adm_date
,convert(varchar,hsp.discharge_date,101) disch_date
,pat.account
from hsp_account hsp
left join patient pat on hsp.pat_id=pat.pat_id
where pat.account in ('AAA','BBB','CCC','DDD')
) cte
where cte.new_admit = 'New Admit'
) cte2
【问题讨论】:
-
不鼓励使用图像的原因之一是依赖屏幕阅读器的人根本无法“看到”图像。您可以添加图像,但您应该确保它也在文本中。这意味着您所追求的结果目前并非所有人都可读。还有很多人在防火墙后面,imgur 被简单地阻止了。
标签: sql common-table-expression row-number