如何在两行中找到日期的差异

时间:2014-07-02 16:40:45

标签: tsql

在下面的数据中,resno是常驻号码。我正在努力寻找那些拥有' R'在顶行(当数据按'排序' 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 个答案:

答案 0 :(得分: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  

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