我有三个表,我在查询Oracle数据库。以下是我试图访问的内容及其内容的表格:
患者表: 访问号码,Pat_Seq
med_admin表: Pat_Seq,Drug_ID,Dose_Given,Administered_Time
药物表: Drug_Name,Drug_ID
我需要提取Drug.Drug_Name,Med_Admin.Dose_Given,Med_Admin.Administered_Time但我还需要将其过滤到具有最近日期的Med_Admin.Drug_ID。
我的老板提出的方式是#34;我需要一份患者用药的清单,其中包含最近的日期/时间。这是我到目前为止的查询:
SELECT to_char(a.administered_time, 'DD-Mon-YYYY HH24:MI:SS') AS "Administered Date",
d.drug_name AS "Drug Name"
FROM med_admin a
JOIN drug d ON a.drug_id = d.drug_id
WHERE a.drug_id IN(select distinct(d.drug_id) from drug d)
每当我添加Med_Admin.Administered_Time时,它会为每个给定的med添加行。想法?
答案 0 :(得分:1)
试试这个,这个查询应该能让你得到所有患者最新药物的详细信息。
SELECT
to_char(a.administered_time, 'DD-Mon-YYYY HH24:MI:SS') AS "Administered Date",
d.drug_name AS "Drug Name"
FROM med_admin a
JOIN drug d ON a.drug_id = d.drug_id
WHERE NOT EXISTS (SELECT 1
FROM med_admin b
WHERE a.Pat_Seq = b.Pat_Seq
AND b.administered_time > a.administered_time)
基本上我们说,如果有EXISTS
一种药物,给予同一患者administered_time
比当前行administered_time
更多,那么就NOT
1}}选择行。
答案 1 :(得分:0)
由于您已经指定了JOIN药物d ON a.drug_id = d.drug_id,因此您无需使用where子句将Med_Admin与药物一起加入:
WHERE a.drug_id IN(select distinct(d.drug_id) from drug d)
对您的查询进行汇总,您可以尝试以下内容:
SELECT a.Dose_Given
AS
"Dose Given", TO_CHAR(a.administered_time, 'DD-Mon-YYYY HH24:MI:SS')
AS
"Administered Date", b.Drug_Name
AS
"Drug Name" FROM Med_Admin a left join Drug b ON a.drug_id=b.drug_id WHERE
a.Administered_Time =
(
SELECT
MAX(Administered_Time)
FROM
Med_Admin c
WHERE
c.Drug_ID=a.Drug_ID
)