34,593
社区成员
发帖
与我相关
我的任务
分享
select * from 病人检查表 t
where
(
select count(1) from 病人检查表
where year(检查日期)=year(t.检查日期)
and abs(datediff(d,检查日期,t.检查日期))<10
and 检查项目=t.检查项目
)=2 --3,5
SELECT
a.病人姓名
from
病人检查表 a
inner join
病人检查表 b on a.病人姓名=b.病人姓名 and a.检查项目=b.检查项目 and datediff(d,a.检查日期,b.检查日期)<10 and a.检查日期!=b.检查日期
inner join
病人检查表 c on c.病人姓名=b.病人姓名 and c.检查项目=b.检查项目 and datediff(d,a.检查日期,c.检查日期)<10 and c.检查日期 not in(a.检查日期,b.检查日期)
where a.检查日期 >='20090101' and b.检查日期<='20091231' and c.检查日期<='20091231'
union
SELECT
a.病人姓名
from
病人检查表 a
inner join
病人检查表 b on a.病人姓名=b.病人姓名 and a.检查项目=b.检查项目 and datediff(d,a.检查日期,b.检查日期)<10 and a.检查日期!=b.检查日期
where a.检查日期 >='20090101' and b.检查日期<='20091231'
union
SELECT
a.病人姓名
from
病人检查表 a
inner join
病人检查表 b on a.病人姓名=b.病人姓名 and a.检查项目=b.检查项目 and datediff(d,a.检查日期,b.检查日期)<10 and a.检查日期!=b.检查日期
inner join
病人检查表 c on c.病人姓名=b.病人姓名 and c.检查项目=b.检查项目 and datediff(d,a.检查日期,c.检查日期)<10 and c.检查日期 not in(a.检查日期,b.检查日期)
inner join
病人检查表 d on d.病人姓名=b.病人姓名 and d.检查项目=b.检查项目 and datediff(d,a.检查日期,d.检查日期)<10 and d.检查日期 not in(a.检查日期,b.检查日期,c.检查日期)
inner join
病人检查表 e on e.病人姓名=b.病人姓名 and e.检查项目=b.检查项目 and datediff(d,a.检查日期,e.检查日期)<10 and e.检查日期 not in(a.检查日期,b.检查日期,c.检查日期,d.检查日期)
where
a.检查日期 >='20090101' and b.检查日期<='20091231' and c.检查日期<='20091231' and d.检查日期<='20091231' and e.检查日期<='20091231'
SELECT
distinct a.*
from
病人检查表 a
inner join
病人检查表 b on a.病人姓名=b.病人姓名 and a.检查项目=b.检查项目 and datediff(d,a.检查日期,b.检查日期)<10 and a.检查日期!=b.检查日期
inner join
病人检查表 c on c.病人姓名=b.病人姓名 and c.检查项目=b.检查项目 and datediff(d,a.检查日期,c.检查日期)<10 and c.检查日期 not in(a.检查日期,b.检查日期)
where a.检查日期 >='20090101' and b.检查日期<='20091231' and c.检查日期<='20091231'
SELECT
病人姓名,DATEPART(wk, 检查日期),检查项目
from
病人检查表
group by 病人姓名,DATEPART(wk, 检查日期) ,检查项目
having count(*) in(2,3,5)
请给出表结构,测试数据,相关算法和需要的结果.谢谢!