Database postgresql选择一列中具有最大值的所有行

Database postgresql选择一列中具有最大值的所有行,database,postgresql,window-functions,ranking-functions,Database,Postgresql,Window Functions,Ranking Functions,我是postgresql的新手,我在postgresql中有这样一个表T: C1 C2 C3 C4 ID C1、C2、C4是内部的。 C3是一个字符 C4基本上是版本号。并且可以是介于1-N之间的任何值。 (例如,在一组insert事件之后,表中的值将更新。) ID是一个字符 问题: 对于给定的ID值,我想选择与之关联的C4最高的所有行。例如,表中可能有N个版本, 我想要与版本N对应的所有结果 我试过了 从T中选择C1、C2、C3、max(C4),其中ID='something' 但它给了我错

我是postgresql的新手,我在postgresql中有这样一个表T:

C1 C2 C3 C4 ID
C1、C2、C4是内部的。
C3是一个字符 C4基本上是版本号。并且可以是介于1-N之间的任何值。
(例如,在一组insert事件之后,表中的值将更新。) ID是一个字符

问题:
对于给定的ID值,我想选择与之关联的C4最高的所有行。例如,表中可能有N个版本, 我想要与版本N对应的所有结果

我试过了

从T中选择C1、C2、C3、max(C4),其中ID='something'

但它给了我错误


请告知。

如果同一版本号可以有多行,请在cte中使用窗口功能
RANK
,并选择RANK等于1的行

SELECT id, c1, c2, c3, c4 
FROM (
    SELECT 
      *
    , RANK() OVER (PARTITION BY id ORDER BY c4 DESC) c4rank
    FROM t
) ranked 
WHERE c4rank = 1
  AND id = 'something'
如果您想要所有id的最新版本,只需从上述语句中省略条件
id='something'

如果给定版本号只能有一行,则使用order by和limit 1

SELECT id, c1, c2, c3, c4
FROM t
WHERE id = 'something'
ORDER BY c4 DESC
LIMIT 1
如果您想要所有id的最新版本&每个(id,版本)组合只能有一行

SELECT DISTINCT ON (id) id, c1, c2, c3, c4
FROM t
WHERE id = 'something'
ORDER BY id, c4 DESC

每个版本和每个文件id将有M个条目。因此,我希望所有属于特定id和max/最新版本的行。对于单行查询,我可以将结果保存到txt文件,如下所示:
\copy(query)to'/abc/xyz.csv'(csv格式)我如何通过这个复杂的大查询我因为太多的偏执而出现语法错误。这是一个不同的问题,请搜索so/谷歌或问一个新问题