2014-07-02 88 views
1

在以下數據中,resno是居民號碼。我試圖找到第一行中有「R」的居民的人數(當數據按'Sort'desc排序時),第1行和第2行中的日期差異爲30天。如何在兩行中找到日期差異

cono resno  date       seq sort  admit_disch 
140   9423 2013-12-12 00:00:00.000  255003 255003 R 
140   9423 2013-11-17 00:00:00.000  255002 255002 D 
140   9423 2013-11-12 00:00:00.000  255001 255001 R 
140   9423 2011-06-06 00:00:00.000  255000 255000 D 
140   9423 2011-05-18 00:00:00.000  254999 254999 A 

140   9604 2012-02-20 00:00:00.000  255548 255548 A 

我能寫一個查詢來獲得'R'居民,但不知道如何檢查兩個不同行的日期。在上述數據中,必須檢查日期2013-12-12是否大於2013-11-17 30天以上。

select cono,COUNT(resno) from 
    (
     select ROW_NUMBER() over(partition by resno rsa.sort desc) rn,* 
     from ri_status_admit rsa 
    )B 
    where B.rn = 1 
    and B.admit_disch = 'R' 

     group by cono,resno 

回答

1
with sorted as 
    (
     select ROW_NUMBER() over(partition by resno rsa.sort desc) rn,* 
     from ri_status_admit rsa 
    ) 
select s1.resno 
    from sorted s1 
    join sorted s2 
    on s1.rn = 1 
    and s1.admit_disch = 'R' 
    and s2.rn = 2 
    and datediff(dd,r1.date, r2.date) > 30 

未測試 我懷疑一些語法錯誤,但的基本思想是

相關問題