2016-06-13 70 views
-1

我需要根据诊所访问情况建立患者人群。此人群的资格标准(筛选)是在评估年的6周内进行3次访问。我如何编码?如何在一段时间(6周)内发现3次或多次事件?

+0

你有什么试过的?你的表格模式是什么?定义“星期”(星期日至星期六?)和“评估年”(公历年,VA预算年,或任何365.25个连续日期?)。提示:使用合适的软件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服务器2014'。语法和功能的差异往往会影响答案。 – HABO

回答

2
DECLARE @Records TABLE (ptID INT, date DATE) 

INSERT INTO @Records VALUES 
    (1, '2016-01-01') 
    ,(1, '2016-01-05') 
    ,(1, '2016-02-01') 
    ,(1, '2016-10-01') 
    ,(2, '2015-12-01') 
    ,(2, '2015-12-10') 
    ,(2, '2015-12-31') 
    ,(2, '2016-01-01') 
    ,(2, '2016-01-05') 
    ,(2, '2016-03-05') 
    ,(3, '2016-01-01') 
    ,(3, '2016-02-01') 
    ,(3, '2016-03-01') 
    ,(3, '2016-04-01') 
    ,(3, '2016-05-01') 
    ,(3, '2016-06-01') 
    ,(3, '2016-07-01') 
    ,(3, '2016-08-01') 
select a.ptID , a.date 
from @Records a 
join @Records b 
     on a.ptID = b.ptID 
    and datediff(wk, a.date, b.date) <= 6 
    and datediff(wk, a.date, b.date) > 0 
    and DATEPART(yy, a.date) = DATEPART(yy, b.date) 
group by a.ptID, a.date 
having count(*) >= 2 
+0

这会在每个月的第一个星期二赶上病人,但在任何六个月的时间内,病人将永远不会有3次访视。甚至是每季度预约的患者。另外,因为0 <= 6,所以会生成一个额外的值。 – DaveX

+0

@DaveX我不知道你指的是什么问题,但我读了“6周内3次访问”。没有开玩笑0是额外的。这就是为什么我> 3并特别指出这一点。 – Paparazzi

+0

是的,你是对的。对不起的错误。如果你在我的声明中将“六个月”替换为“六周”,我认为它大部分仍然有效。我现在看到> 3。但我仍然认为有问题。我尝试了数据。 – DaveX

1

狗仔队值得将表与自身进行比较的所有功劳。我只是在这里改进他的比较。

DECLARE @Records TABLE (
    PatientID  INT 
    ,VisitDate  DATE 
    ) 

INSERT INTO @Records VALUES 
    (1, '2016-01-01') 
    ,(1, '2016-01-05') 
    ,(1, '2016-02-01') 
    ,(1, '2016-10-01') 
    ,(2, '2015-12-01') 
    ,(2, '2016-01-01') 
    ,(2, '2016-01-05') 
    ,(2, '2016-03-05') 

;WITH SixWeeks 
    AS (
     SELECT a.PatientID AS PID1, a.VisitDate AS Date1, 
       b.PatientID AS PID2, b.VisitDate AS Date2, 
       DATEDIFF(dd, a.VisitDate, b.VisitDate) AS DD 
      FROM @Records a 
       JOIN @Records b 
        ON a.PatientID = b.PatientID 
         AND DATEDIFF(dd, a.VisitDate, b.VisitDate) <= 42 
         AND DATEPART(yy,a.VisitDate) = '2016' 
      WHERE EXISTS (SELECT * FROM @Records WHERE (VisitDate > a.VisitDate AND VisitDate < b.VisitDate)) 
     ) 

SELECT PID1 FROM SixWeeks 
    GROUP BY PID1 
+0

不得不调整我的答案,但对我的答案中的数据他们将有2个错误。感谢测试表。 – Paparazzi

相关问题