Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从与多个表联接的表中获取列的最大值_Sql_Oracle_Max - Fatal编程技术网

Sql 从与多个表联接的表中获取列的最大值

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

我想为每个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_子句一起工作。最好在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
而不是
行数