【问题标题】:Filter Out All Entries But Latest Date过滤除最新日期以外的所有条目
【发布时间】:2014-06-26 02:48:30
【问题描述】:

我要从 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。

我老板的说法是“我需要一份患者用药清单,并注明最近的日期/时间。这是我目前的查询:

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 添加行。想法?

【问题讨论】:

  • 您需要为一位患者还是为所有患者服用最新的药物。
  • 我需要为一名患者服用的最新药物,我通过加入患者表并按就诊编号进行搜索来深入了解该药物。

标签: sql oracle date filter


【解决方案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 选择行。

【讨论】:

    【解决方案2】:

    由于您已经指定了 JOIN drug d ON a.drug_id = d.drug_id,因此不需要 where 子句即可将 Med_Admin 与 Drug 连接起来:

    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
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多