Sql t至少接受了一年的治疗,不一定在今天的一年内。您的查询将忽略在2008年4月1日开始服务的人,其最后一次预约是在2009年6月30日。@Scott Mitchell:我明白您的意思,但过去接受治疗一年或几年的人是否有效?这是OP必须更好地澄清的事情。@OM
Sql t至少接受了一年的治疗,不一定在今天的一年内。您的查询将忽略在2008年4月1日开始服务的人,其最后一次预约是在2009年6月30日。@Scott Mitchell:我明白您的意思,但过去接受治疗一年或几年的人是否有效?这是OP必须更好地澄清的事情。@OM,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,t至少接受了一年的治疗,不一定在今天的一年内。您的查询将忽略在2008年4月1日开始服务的人,其最后一次预约是在2009年6月30日。@Scott Mitchell:我明白您的意思,但过去接受治疗一年或几年的人是否有效?这是OP必须更好地澄清的事情。@OMG Ponies:我同意措辞令人困惑,需要澄清。然而,请注意OP的评论:“我正试图确定他们至少接受了一年的治疗。”这让我相信他希望看到至少接受了一年治疗的患者,即使他们的最后一次治疗是在一年多以前。@OMG Ponies:我仍然不认为你得到了治
t至少接受了一年的治疗,不一定在今天的一年内。您的查询将忽略在2008年4月1日开始服务的人,其最后一次预约是在2009年6月30日。@Scott Mitchell:我明白您的意思,但过去接受治疗一年或几年的人是否有效?这是OP必须更好地澄清的事情。@OMG Ponies:我同意措辞令人困惑,需要澄清。然而,请注意OP的评论:“我正试图确定他们至少接受了一年的治疗。”这让我相信他希望看到至少接受了一年治疗的患者,即使他们的最后一次治疗是在一年多以前。@OMG Ponies:我仍然不认为你得到了治疗。您的第二个查询返回所有预约时间在过去一年或更长的患者。他想要(我想)的是,从患者的第一次就诊到最近一次就诊之间至少有一年的时间,无论何时。@Scott Mitchell:在OP的最后一条评论中,我没有看到关于第一次预约的要求。Oracle不支持DATEDIFF,但MySQL和SQL Server支持它(虽然不同的语法IIRC)。啊,现在有了可能性。谢谢!@OMG Ponies:是的,但是SharekOfVulcan在他的问题中说,“不要太担心确切的语法和命名。”按照这种逻辑,你可以找到解决问题的逻辑,但仍然需要获得Oracle语法(除非这是针对另一个数据库的)--这与OP开始的位置相同。但是逻辑与我给出的EXISTS示例相同-不需要检查最大值,因为EXISTS在第一次成功使用该标准时返回true。我当时应该对此进行标记,但我非常确定这就是我解决问题的方法。OMG Ponies的EXISTS解决方案相当优雅,不是吗哦,现在我已经绞尽脑汁了……Oracle不支持DATEDIFF,但MySQL和SQL Server支持DATEDIFF(虽然不同的语法IIRC)。啊,现在有了可能性。谢谢!@OMG Ponies:是的,但SharekOfVulcan在他的问题中说,“不要太担心确切的语法和命名。”根据这种逻辑,您将拥有解决问题的逻辑,但仍然需要获得Oracle语法(除非这是针对另一个数据库的)--这与OP开始的位置相同。但是逻辑与我给出的EXISTS示例相同-不需要检查最大值,因为EXISTS在第一次成功使用该标准时返回true。我当时应该对此进行标记,但我非常确定这就是我解决问题的方法。OMG Ponies的EXISTS解决方案相当优雅,不是吗哦,现在我已经绞尽脑汁了…lead不会有帮助,因为他们之间可能会有很多访问。不过,将此与Scott的Min/Max建议相结合可能会很有用。谢谢!是的,您需要设置一些条件来满足您的确切要求。我只是认为窗口函数对于此类查询非常有用…lead不会吗lp,因为他们之间可能会有很多访问。不过,将此与Scott的最小/最大建议相结合可能会很有用。谢谢!是的,您需要设置一些条件来满足您的确切要求。我只是认为窗口函数对于此类查询非常有用。。。
select distinct * from PatientHistory
where lastVisit = date_sub(lastVisit,interval 1 year)
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)
SELECT a.*
FROM PATIENT_HISTORY a
WHERE EXISTS(SELECT NULL
FROM PATIENT_HISTORY b
WHERE b.visit_date <= ADD_MONTHS(a.visit_date, -12))
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
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;