在下面的数据中,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
答案 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
未经测试 我怀疑一些语法错误,但这是基本的想法