Database postgresql选择一列中具有最大值的所有行
我是postgresql的新手,我在postgresql中有这样一个表T: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' 但它给了我错
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/谷歌或问一个新问题