筛选出所有条目,但最新日期

时间:2014-05-08 15:39:50

标签: sql oracle date filter

我有三个表,我在查询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添加行。想法?

2 个答案:

答案 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
  )