日期:2014-05-17  浏览次数:20472 次

大家帮我看看这个查询怎么写?


CREATE TABLE TJ
(GRBM INT NOT NULL,     --个人编码
RYRQ DATETIME NOT NULL, --入院日期
CYRQ DATETIME NOT NULL) --出院日期


INSERT INTO TJ
SELECT 1001,'2012-01-01 22:10:50','2012-02-01 10:12:56' UNION ALL          
SELECT 1002,'2012-01-10 20:11:11','2012-02-10 12:00:00' UNION ALL
SELECT 1003,'2012-01-12 20:11:11','2012-02-15 12:00:00' UNION ALL
SELECT 1001,'2012-02-06 20:11:11','2012-03-20 12:00:00' UNION ALL
SELECT 1002,'2012-02-20 20:11:11','2012-03-09 12:00:00'
GO

/*
问题:
需要统计2月份出院后,1-7天内再次入院的病人,7-15天再次入院的病人

结果:
1-7天内再次入院的病人:1001
7-15天内再次入院的病人:1002
*/


请问下这个查询怎么写?

------解决方案--------------------
select grbm from tj t1 where month(cyrq)=2 and exists(select 1 from tj t2 where t1.grbm=t2.grbm and datediff(day,t1.cyrq,t2.ryrq) between 5 and 7)

------解决方案--------------------
引用:
select grbm from tj t1 where month(cyrq)=2 and exists(select 1 from tj t2 where t1.grbm=t2.grbm and datediff(day,t1.cyrq,t2.ryrq) between 5 and 7)
 UP
------解决方案--------------------
with cy as
(
select GRBM, cyrq from TJ
)
, ry as
(
select GRBM, ryrq from TJ
)
select *, '1-7天内再次入院的病人'  from cy
inner join ry on cy.GRBM = ry.GRBM
where CYRQ >= '2012.02.01' 
and  CYRQ <= '2012.03.01'
and RYRQ <= DATEADD(DAY,7,CYRQ)
and RYRQ > CYRQ
union
select *, '7-15天内再次入院的病人' from cy
inner join ry on cy.GRBM = ry.GRBM
where CYRQ >= '2012.02.01' 
and  CYRQ <= '2012.03.01'
and RYRQ <= DATEADD(DAY,15,CYRQ)
and RYRQ > DATEADD(DAY,7,CYRQ)
------解决方案--------------------
select a.grbm,case when datediff(dd,b.cyrq,a.ryrq) between 1 and 7 then 1 else 0 end as [1-7天内再次入院的病人]
,case when datediff(dd,b.cyrq,a.ryrq) between 8 and 15 then 1 else 0 end as [7-15天内再次入院的病人]
from (select * from #t where ryrq>'2012-02-01') a,
(select * from #t where cyrq>'2012-02-01' and cyrq<'2012-03-01')b
where a.grbm=b.grbm