Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:从另一个表中获取用户信息及其最新日期记录_Sql - Fatal编程技术网

SQL:从另一个表中获取用户信息及其最新日期记录

SQL:从另一个表中获取用户信息及其最新日期记录,sql,Sql,我有两张桌子 患者:患者id、姓名、年龄 & 医疗记录:id,p_id,日期 我需要从患者中选择所有患者以及他们最新医疗记录的日期。 预期的结果是 p、 身份证 名称 年龄 最新 1. 约翰 20 2020/12/20 2. 英雄 18 2020/12/18 传统的方法是使用连接: 选择p.*,先生* 来自患者p 左连接 选择mr1* 来自MedicalRecord mr1 内连接 选择p_id,MAXdate作为max_date 来自MedicalRecord 按p_id分组 mr2 在mr2

我有两张桌子

患者:患者id、姓名、年龄 & 医疗记录:id,p_id,日期

我需要从患者中选择所有患者以及他们最新医疗记录的日期。 预期的结果是

p、 身份证 名称 年龄 最新 1. 约翰 20 2020/12/20 2. 英雄 18 2020/12/18
传统的方法是使用连接:

选择p.*,先生* 来自患者p 左连接 选择mr1* 来自MedicalRecord mr1 内连接 选择p_id,MAXdate作为max_date 来自MedicalRecord 按p_id分组 mr2 在mr2.p_id=mr1.p_id上 mr2.max_date=mr1.date 先生 关于mr.p_id=p.id 对于分析函数,我们可以在这里使用ROW_NUMBER来获得更简洁的代码:

以cte为例 选择p.*,mr.*,按p.id按mr.date DESC rn排序的分区上的行号 来自患者p 左加入MedicalRecord mr ON mr.p_id=p.id 挑选* 来自cte 其中rn=1;
您可以使用标准sql分析函数row_number,如下所示:

Select * from
(SELECT P.*, row_number() over (partition by p.id order by mr.date desc) as rn
  FROM Patient P
  JOIN MedicalRecord mr ON mr.p_id = p.id) t
Where rn = 1
SELECT P.*
  FROM Patient P
  JOIN MedicalRecord mr ON mr.p_id = p.id
 WHERE NOT EXISTS
       (select 1 from MedicalRecord mr1
         Where mr1.p_id = mr.p_id
           And mr1.date > mr.date)
您还可以按如下方式使用“不存在”:

Select * from
(SELECT P.*, row_number() over (partition by p.id order by mr.date desc) as rn
  FROM Patient P
  JOIN MedicalRecord mr ON mr.p_id = p.id) t
Where rn = 1
SELECT P.*
  FROM Patient P
  JOIN MedicalRecord mr ON mr.p_id = p.id
 WHERE NOT EXISTS
       (select 1 from MedicalRecord mr1
         Where mr1.p_id = mr.p_id
           And mr1.date > mr.date)
试试这个:

SELECT *
  FROM Patient
  JOIN (SELECT
            MedicalRecord.p_id,
            max(MedicalRecord.date) [date(latest)]
        FROM MedicalRecord
        group by MedicalRecord.p_id
        ) x ON Patient.p_id = x.p_id

你好,谢谢你的回答。使用传统的方式,即使患者没有记录,我如何向他们展示?抱歉,我忘了在问题中提到它。@Sciryl将内部联接替换为左联接,它应该可以工作。用您正在使用的数据库标记您的问题。