- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个复杂的查询需要弄清楚,但我不太精通编写查询和子查询。
问题:我需要检索唯一的患者记录,但如果记录具有非空 master_patient_id,我需要子查询或加入该 master_patient 表并查询最近的(created_at desc 限制1) 该 master_patient 的 child 患者。
这样做的原因是,如果他们被重新接纳到同一家机构,我们的系统将为同一名患者创建新的患者记录。在为给定患者创建第二条记录时,我们还创建了一个 master_patient 记录以将这 2 条患者记录与其相关联,以便系统可以知道它们是同一名患者。
现在,我需要显示非重复患者的列表。所以我需要一个查询,从患者记录中获取患者,但查询 master_patient 表并只检索与其 master_patient 关联的最新患者。
Patient Table 有:id, name, master_patient_id并且患者属于 master_patient 但不需要在场。
Master Patient 表只有一个 id 和 has_many patients。
期望的结果: 应该是唯一的患者记录,但是找出患者之间是否唯一的唯一方法是查询 master_patient 表以查看是否有任何患者属于它,然后只检索最新患者(master_patient 的 child )。
我不能基于 master_patient 进行查询,因为只有 1 条记录的患者不存在这些查询。我应该使用某种类型的连接或子查询吗?
更新:感谢@τεκ,我能够调整他的查询以在 Postgres 中工作:
更新 2:对查询进行了 1 次细微调整,使其更短并更正了返回的空 ID:
SELECT MAX(patients.id) as id, *
FROM "patients"
JOIN (
SELECT MAX(created_at) AS created_at,
patient_master_id,
COALESCE(patient_master_id, id) pm_id
FROM patients
GROUP BY patient_master_id,
COALESCE(patient_master_id, id)
) s
ON (s.pm_id = patients.id or s.patient_master_id = patients.patient_master_id)
AND s.created_at = patients.created_at
GROUP BY patients.id, s.created_at, s.patient_master_id, s.pm_id
最佳答案
select max(id) as id from patient p
join (select
max(created_at) as created_at,
master_patient_id,
case when master_patient_id is null then id else null end as id
from patient
group by master_patient_id, case when master_patient_id is null then id else null end
) s on (s.id = p.id or s.master_patient_id = p.master_patient_id) and s.created_at = p.created_at
可能有一种更简单的、特定于 postgres 的方法,但我不知道 postgres。在 T-SQL 中,它是交叉应用
。
关于SQL 查询 : how to select records, 但如果存在父记录,请选择它的最新子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658730/
我有两个表的一个很常见的情况:下达的“订单”和每个订单的“ItemsBought”: Orders: orderId, orderDate, [...] ItemsBought: boughtId,
我有这个问题: query 1 = SELECT emp.employeId,emp.nom,emp.prenom,msg.note,msg.quelleDate, emp.remarques, em
您好,我有一个显示枚举列表的 WPF 组合框。代码如下。 但是,当加载 View 时,它显示列表中的第一个枚举,但我希望它显示“请选择”,所以是否有 XAML 来执行此操作(如果需要, Vi
假设我们有一个定义了的表: 如果不存在信号,则创建表(严格的整数主键自动递增,名称为TEXT) 该表最初是空的。 我想通过选择获得给定名称的名字,如果名字不存在,则添加它并获得新的自动递增的ID。 我
根据选项卡的数量和屏幕方向,选项卡会彼此相邻显示或显示在下拉列表中。我写了一个函数来设置当前选项卡。这有效但不适用于下拉列表模式。必须做什么? static class TabsListener im
我有以下数据框 id pattern1 pattern2 pattern3 1 a-b-c a-b-- a-b-c 2 a-a-- a-b--
表1 id name 1 john 2 mary 3 bill 4 carrie 表2 id thing 1 ball
在 firefox 中,以下 CSS 仅应用于最后一个 div,因为它是唯一具有两个类的 div: .a.b { color: red; } Stuff A Stuff B Stuff A an
我有一个带有日期列的简单事件表。我可以轻松选择接下来的n个事件(假设n = 3): SELECT * FROM events WHERE `date` > NOW() ORDER BY `date`
我是一名优秀的程序员,十分优秀!