作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一张包含患者 ID、联系日期和操作代码的表格。我想检索操作代码等于 EPS 或 D 的所有行,但是如果操作代码存在于同一联系日期,我只想保留一行。
例如这是我的表的一部分,journal:
PatientID Contactdate Actioncode
1 2010-5-6 EPS
1 2010-5-6 D
1 2012-3-4 CNT
1 2013-7-8 D
2 2010-1-4 EPS
2 2010-5-6 D
这是我现在用来检索操作代码是 EPS 或 D 的所有行的代码
select * from journal j where j.actioncode in ('EPS', 'D')
我尝试按联系人日期分组,但后来我错过了患者不同的行。使用 distinct(contactdate) 会产生相同的效果。当日期和 patientid 相似并且操作代码是 D 或 EPS 时,我可以在这里使用什么来仅返回一行?
首选结果:
PatientID Contactd Actioncode
1 2010-5-6 D
1 2012-3-4 D
2 2010-1-4 EPS
2 2010-5-6 D
最佳答案
我们可以在这里尝试使用 ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY PatientID, Contactdate
ORDER BY Actioncode) rn
FROM journal
WHERE Actioncode in ('EPS', 'D')
)
SELECT PatientID, Contactdate, Actioncode
FROM cte
WHERE rn = 1;
如果两个操作代码都出现,这将始终保留 Actioncode='D'
记录。相反,如果您想保留 EPS
记录,则修改对 ROW_NUMBER
的调用以使用 ORDER BY Actioncode DESC
。
关于postgresql - 如果只有一列不同,我怎样才能只得到一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56393317/
我是一名优秀的程序员,十分优秀!