两列中的Postgres不同查询

Postgres distinct query in two columns

我想写一个 postgres 查询。对于(career-id 和 uid)的每个不同组合,我应该 return 具有最大时间的整行。 这是示例数据

id  time    career_id   uid  content
1   100     10000        5     Abc
2   300      6           7     xyz
3   200     10000        5     wxv
4   150      6           7     hgr

答案:

id  time    career_id   uid   content
2   300           6       7   xyz
3   200       10000       5   wxv

您可以为此使用 CTE。这样的事情应该有效:

WITH cte_max_value AS (
SELECT 
  career_id, 
  uid, 
  max("time") as max_time
FROM mytable
GROUP BY career_id, uid
)
SELECT DISTINCT t.* 
FROM mytable AS t
INNER JOIN cte_max_value AS cmv 
  ON t.uid = cmv.uid AND t.career_id = cmv.career_id AND t.time = cmv.max_time

CTE 为您提供 career_iduid 的所有唯一组合以及相关的最长时间,然后内连接将整行连接到此。我正在使用如果你得到两行具有相同的最大时间的相同组合 career_iduid 你将得到两行返回。 如果您不想这样,则需要找到解决此问题的策略。

编辑:另外,a_hrose_with_name 的解决方案提出的解决方案要好得多,除非您需要与其他服务器有一定程度的兼容性(遗憾的是语法不同),否则您应该改用它。

这可以在 Postgres

中使用 distinct on () 来完成
select distinct on (career_id, uid) *
from the_table
order by career_id, uid, "time" desc;