求一个差数列

jalaihh 2014-12-09 10:43:04
医院同一病人多次住院,记录了每次住院的时间,我现在想求一个差数列,算出其每次住院的间隔天数
示例 如下

姓名 入院日期 出院日期
aaaaaa 20140101 20140115
aaaaaa 20140215 20140230
bbbbbb 20140201 20140216
bbbbbb 20140218 20140301
bbbbbb 20140305 20140319


希望得到的结果是
姓名 入院间隔
aaaaaa 31
bbbbbb 2
bbbbbb 4
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jalaihh 2014-12-09
  • 打赏
  • 举报
回复
谢谢名位兄弟
hepe00 2014-12-09
  • 打赏
  • 举报
回复

;with cte(userid,startdate,enddate) as(
select 'aaaaaa','20140101','20140115' union all
select 'aaaaaa','20140215','20140230' union all
select 'bbbbbb','20140201','20140216' union all
select 'bbbbbb','20140218','20140301' union all
select 'bbbbbb','20140305','20140319' 
),
cteWork as(
	select userid,startdate,enddate,row_number() over(partition by userid order by startdate,enddate) as sn
	from cte
)
select a.userid,datediff(day,a.enddate,b.startdate) as cnt
from cteWork as a
	join cteWork as b on a.userid=b.userid and b.sn-a.sn=1
userid cnt ------ ----------- aaaaaa 31 bbbbbb 2 bbbbbb 4 (3 行受影响)
中国风 2014-12-09
  • 打赏
  • 举报
回复
use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([姓名] nvarchar(6),[入院日期] Datetime,[出院日期] DATETIME)
Insert #T
select N'aaaaaa','20140101','20140115' union all
select N'aaaaaa','20140215','20140228' union all
select N'bbbbbb','20140201','20140216' union all
select N'bbbbbb','20140218','20140301' union all
select N'bbbbbb','20140305','20140319'
Go
SELECT  a.[姓名],DATEDIFF(dd,a.[出院日期],b.[入院日期]) AS [间隔天数]
FROM    #T AS a
        INNER JOIN #T AS b ON a.[姓名] = b.[姓名]
                              AND a.[入院日期] < b.[入院日期]
WHERE   b.入院日期 = ( SELECT   MIN([入院日期])
                   FROM     #T
                   WHERE    [姓名] = b.[姓名]
                            AND [入院日期] > a.[入院日期]
                 )
                 
/*
姓名	间隔天数
aaaaaa	31
bbbbbb	2
bbbbbb	4
*/
中国风 2014-12-09
  • 打赏
  • 举报
回复
20140230--日期不正确,2月没30日吧
jalaihh 2014-12-09
  • 打赏
  • 举报
回复
楼上的兄弟不是你理解的这样, 我这是要计算这次的入院日期-上次的出院日期,也不要按姓名合计,这个人如有3次住院记录,我要得出2条记录,分别计算入院日期-上次的出院日期的差,
--小F-- 2014-12-09
  • 打赏
  • 举报
回复
select 姓名,sum(datediff(dd,入院日期,出院日期)) from tb group by 姓名
--小F-- 2014-12-09
  • 打赏
  • 举报
回复
select 姓名sum(datediff(dd,入院日期,出院日期)) from tb group by 姓名

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧