我是SQL的初学者。所以我有两个表(表a和表b) 表a容纳具有唯一ID的人员,表b容纳表a的每个人员的多行以及人员ID(用于可能的联接)。表b中的行按列n row_number排序。
我如何只选择表b中具有最高row_number的行的所有人?
我希望你能对我有所了解。
欢呼
答案 0 :(得分:0)
如果我说对了:
SELECT a.persons_ID
,b.rn
FROM A
INNER JOIN
(
SELECT MAX(row_number_column) AS rn
,persons_ID
FROM B
GROUP BY persons_ID
) sub
ON sub.persons_ID = A.persons_ID
内部联接中的子选择将表B的数据分组。因此,每个persons_ID
仅存在一行-最高row_number_column
的行。
最后,只需对persons_ID进行简单的连接即可。
答案 1 :(得分:0)
如果除了个人ID和每个人的最后一个row_number之外,您不需要任何其他信息,那么这很简单。让我们叫第一个表person
和第二个visit
:
select person_id,
max(row_number) max_row_number
from visit
group by person_id
如果您需要 first 表中的其他信息,例如person.name
,请执行连接:
select person.person_id,
person.name,
max(visit.row_number) max_row_number
from person
inner join visit on visit.person_id = person.person_id
group by person.person_id,
person.name
如果您需要 second 表中的其他信息,例如visit.present
,则现代数据库支持row_number()
窗口函数(不要与您所使用的列混淆)有):
select name,
base.row_number,
present
from (
select person.name,
row_number() over (partition by visit.person_id
order by visit.row_number desc) rn,
visit.row_number,
visit.present
from person
inner join visit on visit.person_id = person.person_id
) base
where rn = 1
NB:我强烈建议将列row_number
重命名为其他名称,因为row_number
是许多数据库中的分析函数。