我有一个结构表
(处方)
clmID int
patid int
drugclass char(3)
drugName char(25)
fillDate date
scriptEndDate date
strength int
和一个查询
;with PatientDrugList(patid, filldate,scriptEndDate,drugClass,strength)
as
(
select rx.patid,rx.fillDate,rx.scriptEndDate,rx.drugClass,rx.strength
from rx
)
,
DrugList(drugName)
as
(
select x.drugClass
from (values('h3a'),('h6h'))
as x(drugClass)
where x.drugClass is not null
)
SELECT PD.patid, C.calendarDate AS overlap_date
FROM PatientDrugList AS PD, Calendar AS C
WHERE drugClass IN ('h3a','h6h')
AND calendardate BETWEEN filldate AND scriptenddate
GROUP BY PD.patid, C.CalendarDate
HAVING COUNT(DISTINCT drugClass) = 2
order by pd.patid,c.calendarDate
这Calendar
是一个简单的日历表,其中包含整个研究期间所有可能的日期,没有其他列。
我的查询返回的数据看起来像
重叠日期表示每天在 PatientDrugList CTE 之后列出的两个类别中为一个人开具药物。
我想知道每个人连续服用两种药物的天数。我不能使用简单max
和min
汇总,因为这不会告诉我是否有人停止了这个方案然后重新开始。什么是找出这一点的有效方法?
编辑:DrugList CTE 中的行构造函数应该是存储过程的参数,并且为了本示例的目的进行了修改。