SQL - 在最近一次访问前一年进行办公室访问的患者

时间:2010-10-21 19:39:38

标签: sql oracle oracle10g

我正在尝试编写一个查询,以便在最近一次访问之前至少一年内找到办公室访问过的患者。我想到的各种各样的方式让我的头脑全都扭曲了,所以我想知道是否有人在那里可以看到一种明显的方式来写我失踪的东西。不要过分担心确切的语法和命名 - 我应该能够翻译它。 : - )

谢谢!

4 个答案:

答案 0 :(得分:3)

使用:

SELECT ph.*
  FROM PATIENT_HISTORY ph
 WHERE ph.visit_date >= (SYSDATE - 365)

...或:

SELECT ph.*
  FROM PATIENT_HISTORY ph
 WHERE ph.visit_date >= ADD_MONTHS(SYSDATE, -12)

ADD_MONTHS不言自明。在Oracle中,SYSDATE返回当前日期和时间,您可以通过添加/减去一个数字(被解释为天数)来操纵Oracle DATE(包括时间)。

对于过去一年或更长时间记录的患者:

SELECT a.*
  FROM PATIENT_HISTORY a
 WHERE EXISTS(SELECT NULL
                FROM PATIENT_HISTORY b
               WHERE b.visit_date <= ADD_MONTHS(a.visit_date, -12))

答案 1 :(得分:1)

select distinct * from PatientHistory
where lastVisit = date_sub(lastVisit,interval 1 year)

答案 2 :(得分:1)

如果您想确定患者是否已接受治疗至少一年(您的评论听起来像是这样),那么您就不能进行如下查询:

SELECT *
FROM Patients p
WHERE 
    DATEDIFF(d, 
             (SELECT MIN(AppointmentDate) FROM Appointments a WHERE a.PatientID = p.PatientID),
             (SELECT MAX(AppointmentDate) FROM Appointments a WHERE a.PatientID = p.PatientID)) >= 365

我不知道这种语法是否会起作用,但概念就是说,“只返回那些自其最早和最近约会以来的天数至少为365天的患者。

答案 3 :(得分:1)

使用Oracle中的WINDOW FUNCTIONS来完成它是相当直接的。

如果您的VISITS表格类似于:

create table visits (
    patient_id number,
    visit_date date,
    ....
);

您可以使用这个简单的查询:

select patient_id, visit_date, 
       lead(visit_date, 1, null) 
           over (partition by patient_id order by visit_date) as next_visit_date
  from visits;

并且会为同一位患者提供一行visit_date值和visit_date值。

然后通过简单的地方,您可以检查一年条件。