我正在尝试为每个患者计算KPI,该KPI称为“初始处方开始日期(IPST)”。
IPST的定义是,如果患者在开始日期为IPST的开始日期之前60天内有使用该特定药物的否定史。
例如-请参见下面的屏幕截图,对于ID = 101的患者,我将从IPST开始为4/15/2019,4/15/2019和4/1/2019之间的天数差是14 <60因此,我会将我的IPST更改为4/1/2019。
如右表所示,此迭代的IPST继续为2019年3月17日,而IPST为2018年3月18日。
我试图按如下所示构建UDF,我在这里传递患者的ID,而UDF返回IPST。
创建功能[Initial_Prescription_Date] ( @id Uniqueidentifier
)
退货日期
如
开始
{
我无法在此处实现此代码
}
我可以从这样的药物表中获取患者的开始日期列表
选择ID,从Patient_Medication开始日期
我将不得不遍历此列表以获取患者的IPST。
答案 0 :(得分:0)
我将回答以启动一个我们可以处理的对话框。
我遇到的问题是,上一条记录与您为IPST选择的ID为102天之间的天数之差为29天,而您为102选择的IPST为393天,正确吗?
您无需循环即可解决此问题。如果您只比较所有日期和最近日期,则可以使用MAX:
DECLARE @PatientRecords TABLE
(
ID INTEGER,
StartDate DATE,
Medicine VARCHAR(100)
)
INSERT INTO @PatientRecords VALUES
(101,'20181201','XYZ'),
(101,'20190115','XYZ'),
(101,'20190317','XYZ'),
(101,'20190401','XYZ'),
(101,'20190415','XYZ'),
(102,'20190401','XYZ'),
(102,'20190415','XYZ'),
(102,'20190315','XYZ'),
(102,'20180318','XYZ');
With maxCTE AS
(
SELECT *, DATEDIFF(DAY, StartDate, MAX(StartDate) OVER (PARTITION BY ID, MEDICINE ORDER BY StartDate ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)) [IPSTDateDifference]
FROM @PatientRecords
)
SELECT m.ID, m.Medicine, MIN(m.StartDate) [IPST]
FROM maxCTE m
WHERE [IPSTDateDifference] < 60
GROUP BY m.ID, m.Medicine
ORDER BY 1,3;