从与多个表

时间:2017-02-06 14:37:02

标签: sql oracle max

我想为每个id

获取seq的最大值

带有示例查询:

SELECT a.id, a.seq, ... FROM TableA a, TableB b, ...
WHERE a.id = b.id, ...

idseq是主键。 TableB将通过TableB的外键与其他表连接。 不使用group by因为我将连接几个带有许多提取列和大量where_clause的表,因此我需要按列编写很多组。

换句话说,我只想为每个唯一max(seq)选择id行。

请使场景适用于理论上无限的列,表和where_clause。最好在Oracle数据库中使用。

2 个答案:

答案 0 :(得分:0)

您似乎需要恰当地使用OVER()PARTITION BY

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

答案 1 :(得分:0)

您可以使用ROW_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