Sql 从与多个表联接的表中获取列的最大值
我想为每个id获取seq的最大值 使用示例查询:Sql 从与多个表联接的表中获取列的最大值,sql,oracle,max,Sql,Oracle,Max,我想为每个id获取seq的最大值 使用示例查询: SELECT a.id, a.seq, ... FROM TableA a, TableB b, ... WHERE a.id = b.id, ... id和seq是主键。 TableB将通过TableB的外键与其他表联接。 不使用GROUPBY,因为我将连接多个具有许多提取列和许多where_子句的表,因此我将需要编写许多GROUPBY列 换句话说,我只想为每个唯一的id选择带有max(seq)的行 请使该场景与理论上无限的列、表和where
SELECT a.id, a.seq, ... FROM TableA a, TableB b, ...
WHERE a.id = b.id, ...
id
和seq
是主键。
TableB将通过TableB的外键与其他表联接。
不使用GROUPBY,因为我将连接多个具有许多提取列和许多where_子句的表,因此我将需要编写许多GROUPBY列
换句话说,我只想为每个唯一的id
选择带有max(seq)
的行
请使该场景与理论上无限的列、表和where_子句一起工作。最好在Oracle数据库中使用。似乎需要适当地使用
OVER()
和分区:
SELECT a.id,
MAX(seq) OVER (PARTITION BY a.id)
FROM TableA a, TableB b
WHERE a.id = b.id
GROUP BY a.id
理想情况下,您可以在两个表之间使用显式联接:
SELECT a.id,
MAX(seq) OVER (PARTITION BY a.id)
FROM TableA a
INNER JOIN TableB b on a.id = b.id
GROUP BY a.id
您可以使用ROW\u NUMBER
进行以下操作:
SELECT id, seq
FROM (
SELECT a.id, a.seq,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY seq DESC) AS rn
FROM TableA a
JOIN TableB b ON a.id = b.id) AS t
WHERE t.rn = 1
如果在平局的情况下,您希望返回具有最大seq
值的所有记录,则使用RANK
而不是行数