我有以下表格
AdmittedPatients(pid, workerid, admitted, discharged)
Patients(pid, firstname, lastname, admitted, discharged)
DiagnosticHistory(diagnosisID, workerid, pid, timeofdiagnosis)
Diagnosis(diagnosisID, description)
这是一个SQL小提琴:http://sqlfiddle.com/#!15/e7403
注意事项:
这是我的任务:列出在最后一次出院后30天内入院的患者。为每位患者列出他们的患者识别号,姓名,诊断和入院医生。
这是我到目前为止所做的事情:
select pid, firstname, lastname, admittedpatients.workerid, patients.admitted, admittedpatients.discharged
from patients
join admittedpatients using (pid)
group by pid, firstname, lastname, patients.admitted, admittedpatients.workerid, admittedpatients.discharged
having patients.admitted <= admittedpatients.discharged;
当pid为0,1,2和4时,它会从0,1和4返回pid。
答案 0 :(得分:1)
不确定为什么需要分组或在这里......没有聚合......
SELECT A.pid, firstname, lastname, A.workerid, P.admitted, A.discharged
FROM patients P
INNER JOIN admittedpatients A
on P.pID = A.pID
WHERE date_add(a.discharged, interval 30 day)>=p.admitted
and p.admitted >=a.discharged
更新小提琴:http://sqlfiddle.com/#!2/dc33c/30/0
没有返回所有需要的字段,但是当它获得所需的结果集时,我想它只是来自这里的一系列连接......
更新为postgresql:
SELECT A.pid, firstname, lastname, A.workerid, P.admitted, A.discharged
FROM patients P
INNER JOIN admittedpatients A
on P.pID = A.pID
WHERE a.discharged+ interval '30 day' >=p.admitted
and p.admitted >=a.discharged
答案 1 :(得分:1)
我没有在小提琴中看到任何诊断信息,所以我没有返回任何。
select pid
,p.lastname,p.firstname
,ad.lastname,ad.firstname
from AdmittedPatients as a
join AdmittedPatients as d using (pid)
join Patients as p using (pid)
join AdminDoctors as ad on ad.workerid=a.workerid
where d.discharged between a.admitted-30 and a.admitted
答案 2 :(得分:0)
这里有一个相当基本的WHERE子句错误:
在出院前和出院后不能两者 + 30
在整个查询结束之前,你还有一个额外的分号,可能会完全丢掉最后一行。
我认为你正在寻找被录取者=已经出院