我想为每个id
获取seq的最大值带有示例查询:
SELECT a.id, a.seq, ... FROM TableA a, TableB b, ...
WHERE a.id = b.id, ...
id
和seq
是主键。
TableB将通过TableB的外键与其他表连接。
不使用group by因为我将连接几个带有许多提取列和大量where_clause的表,因此我需要按列编写很多组。
换句话说,我只想为每个唯一max(seq)
选择id
行。
请使场景适用于理论上无限的列,表和where_clause。最好在Oracle数据库中使用。
答案 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
如果有关系,您想要返回所有1}}值最大的记录,请使用seq
代替RANK
。