2014-07-02 75 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 

未测试 我怀疑一些语法错误,但的基本思想是

相关问题