SQL中的重新读取计数

问题描述 投票:1回答:3

我正在尝试在我的数据集中计算患者的再入院率,但必须使用SQL来计算。我遇到了麻烦,希望有人可以指出正确的方向。我的数据看起来像这样

>ID FirstDateofService LastDateofServicePerformantProvider等(更多不相关的行)2202 2012-09-18 2012-09-21圣路加2202 2012年9月29日2012年10月4日圣路加4280年2012-09-19年2012-09-20年Seton4280 2012年9月19日2012年10月18日4280 2012年9月21日2012年10月9日Seton4280 2012年10月10日2012年10月17日Seton8980 2013-06-20 2013-06-24登顿地区8980 2013-07-06 2013-07-06登顿地区

然后数据不停地传。我正在尝试编写一个查询,以计算重新入院的次数(想按ID进行),其中重新入院是指从同一家医院出院30天或更短后才入院而构成的。我尝试了许多方法,但无法得出准确的结果。任何建议,将不胜感激。谢谢。

sql
3个回答
1
投票

这是假设人们在离开的同一天无法重新入场。它还假定Id是某种患者标识符。

Select
    Id,
    Count(*) as Readmissions
From
    table a2 -- a2 happens after a1
Where
    Exists (
        Select 'x'
    From
        table a1 
    Where
        a1.Id = a2.Id And
        a1.PerformingProvider = a2.PerformingProvider And
        a1.LastDateOfService < a2.FirstDateOfService And
        dateadd(day, 30, a1.LastDateOfService) >= a2.FirstDateOfService
    )
Group By
    Id

0
投票
/*

drop table #t
create table #t (id int, FirstDateOfService datetime, LastDateOfService datetime,         PerformingProvider varchar(30));
go
insert into #t (id, FirstDateOfService, LastDateOfService, PerformingProvider)
values
(2202  , '2012-09-18' , '2012-09-21' ,           'St. Luke''s')
,(2202   , '2012-09-29' , '2012-10-04',            'St. Luke''s')
,(4280   , '2012-09-19' , '2012-09-20',            'Seton')
,(4280   , '2012-09-19' , '2012-10-18',            'Seton')
,(4280   , '2012-09-21' , '2012-10-09',            'Seton')
,(4280   , '2012-10-10' , '2012-10-17',            'Seton')
,(8980   , '2013-06-20' , '2013-06-24',            'Denton Regional')
,(8980   , '2013-07-06' , '2013-07-06' ,           'Denton Regional')
*/
;with cte (rid, id, FirstDateOfService, LastDateOfService, PerformingProvider) 
as (
    select rid=row_number() over (PARTITION BY id order by FirstDateOfService),*
    from #t
)
select t1.id, t1.PerformingProvider, Readmission=count(*)
from cte t1
inner join cte t2
on t1.id = t2.id
and t1.rid = t2.rid-1
and t2.FirstDateOfService < dateadd(day, 30, t1.LastDateOfService)
and t1.PerformingProvider = t2.PerformingProvider
group by t1.id, t1.PerformingProvider
order by t1.id;

但是我认为您的数据需要清理。为什么id = 4280具有两个相同的firstdayofservice(2012-09-19)但不同的lastdayofservice?


0
投票

jyao,数据可能没有错。一个人可以在同一天入院和出院..因此,在上面的示例中,患者在同一天第二次入院前已在同一天入院和出院。

© www.soinside.com 2019 - 2024. All rights reserved.