gpt4 book ai didi

postgresql - 如果只有一列不同,我怎样才能只得到一行

转载 作者:行者123 更新时间:2023-11-29 12:34:46 26 4
gpt4 key购买 nike

我有一张包含患者 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com