1

データセットで患者の再入院をカウントしようとしていますが、SQL を使用してカウントする必要があります。私は問題を抱えており、誰かが私を正しい方向に向けてくれることを願っています. 私のデータはそのように見えます

> ID FirstDateofService LastDateofService PerformingProvider など(関連のない行を増やす)
2202 2012-09-18 2012-09-21 聖路加
2202 2012-09-29 2012-10-04 聖
路加 4280 2012-09-19 2012-09- 20 セトン
4280 2012-09-19 2012-10-18 セトン
4280 2012-09-21 2012-10-09 セトン
4280 2012-10-10 2012-10-17 セトン
8980 2013-06-20 2013-06-24 デントンリージョナル
8980 2013-07-06 2013-07-06 デントン リージョナル

そして、データは延々と続きます。同じ病院から退院してから 30 日以内に再入院した場合に、再入院の数をカウントするクエリを作成しようとしています (ID ごとに実行したい)。私は多くの方法を試しましたが、正確な結果が得られません。任意の提案をいただければ幸いです。ありがとうございました。

4

2 に答える 2

1

これは、退院したその日に再入院できないことを前提としています。また、Id はある種の患者 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
于 2013-09-06T21:29:21.060 に答える
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 に 2 つの同じ firstdayofservice (2012-09-19) があるのに lastdayofservice が異なるのはなぜですか?

于 2013-09-06T22:31:27.553 に答える