我创建了一个医院数据库,并且管理层想知道去年有多少人被诊断出患有癌症"
CREATE TABLE patients (
ID_patients INTEGER NOT NULL,
Name VARCHAR NOT NULL
);
CREATE TABLE visit(
ID_visit INTEGER NOT NULL,
DATE_visit DATE NOT NULL,
FK_patients INTEGER NOT NULL,
);
CREATE TABLE Diagnosis(
ID_Diagnosis INTEGER NOT NULL,
FK_disease INTEGER NOT NULL
FK_visit INTEGER
);
CREATE TABLE Disease(
ID_disease INTEGER NOT NULL,
Name_disease VARCHAR NOT NULL
);
现在我们需要找出:去年哪些患者被诊断患有癌症。 我使用下面的查询来获得去年访问过的患者,但我不知道如何针对癌症患者?我想我应该使用" VIEW AS"但我不确定。
SELECT *
FROM Visit
WHERE Date_Visit BETWEEN
(CURRENT_DATE - interval '2' year) AND CURRENT_DATE - INTERVAL '1' YEAR;
答案 0 :(得分:1)
假设您只需要患者计数并且您已经知道如何定义癌症,那么您将要使用JOIN将这些表连接在一起:
SELECT COUNT(v.FK_patients)
FROM visit v
JOIN Diagnosis d on d.ID_Diagnosis = v.FK_diagnosis --Here is where you connect the tables
WHERE v.Date_Visit BETWEEN
(CURRENT_DATE - interval '2' year) AND CURRENT_DATE - INTERVAL '1' YEAR
AND FK_disease IN(--Your list of cancer ids);
答案 1 :(得分:0)
这应该是直截了当的我猜...:
select pa.ID_patients, pa.Name
from patients pa, visit vi, Diagnosis dia, Disease dis
where vi.FK_patients = pa.ID_patients
and dia.ID_Diagnosis = vi.FK_diagnosis
and dis.ID_disease = dia.FK_disease
and upper(dis.Name_disease) like '%CANCER%'
只需将日期过滤添加到其中,它就会显示所需的结果......
答案 2 :(得分:0)
Dank很好地说明了这一点。这里我们可以使用一些干净的DATE函数而不是使用INTERVAL。代码看起来更干净,我们也想要过去一年的数据,所以我假设您需要2015年1月1日至2015年12月31日的数据。希望在片段下方有所帮助。
SELECT COUNT(v.FK_patients)
FROM visit v
JOIN Diagnosis d on d.ID_Diagnosis = v.FK_diagnosis --Here is where you connect the tables
WHERE v.Date_Visit BETWEEN
TRUNC(ADD_MONTHS(SYSDATE,-12),'YEAR') AND TRUNC(SYSDATE,'YEAR')-1 ;