我的大脑此刻一定是完全糊状的,因为我被困在这上面。我有一张表格,上面列出了某人服用药物的日期,以及他们服用药物的天数。可以为一个人开出n
多种药物,因此以下查询的 CTE 是找到最大的时间范围(药物的填充日期 + 供应天数。)然后我想找到至少服用七种不同药物的人同时。我很难找到人们在给定时间范围内服用的药物。这需要限制在一个人至少seven
一次吸毒的时间段内。直到最后一部分,一切正常。
来自 CTE 的样本数据(fillDate + longscript =endingDate)
并发脚本由count(distinct rx.drugname)
查询决定
;with cte
as
(
select rx.patid
,rx.fillDate
,MAX(rx.dayssup) as longestScript
,DATEADD(day,cast(rx.dayssup as int),rx.filldate) as endingDate
from rx
group by rx.patid, rx.fillDate,rx.daysSup
),
startends as (
select patid, FillDate as thedate, 1 as isstart 0 as isend
from CTE union all
select patid, EndingDate as thedate, 0 as isstart, 1 as isend
from CTE
),
cums as (
select se.*,
(select min(thedate) from startends se2 where se2.filledate > se.filldate) as nextdate,
(select SUM(isstart) from startends se2 where se2.filldate <= se.filldate) as cumstarts,
(select SUM(isend) from startends se2 where se2.filldate <= se.filldate) as cumends
from startends se
)
select *
from cums
where sumstarts - cumends >= 7
您可以在第二个查询中看到每个患者出现多次,且在 fillDate 和endingDate 之间的时间跨度不同。如何编写查询以使第二个屏幕帽的第一行重复九种药物?SQL Server 08 r2 是我的 dbms。