我有一个看起来像下面的表格。
ParentID | PersonID | Year
----------------------------
1 1 2019
1 2 2020
3 3 2019
3 4 2020
5 5 2019
[我正在尝试找出当ParentID具有多个记录时如何选择当前的PersonID,因此我的结果将如下所示。
ParentID | PersonID | Year
----------------------------
1 2 2020
3 4 2020
5 5 2019
我不能仅选择最大的PersonID,因为有时我们会创建上一年的Person记录,在这种情况下,PersonID会更大,我们仍然想返回今年的记录。我也无法根据年份进行选择,因为如果他们没有今年的记录,我们仍然需要他们每年的最新记录。
目前,我已经尝试过以六种方式选择此子集,但仅能使我的大脑受伤。任何帮助将不胜感激!
过滤而不是聚合。
一种便携式解决方案是使用相关子查询进行过滤,该子查询每year
返回最新的parent_id
:select t.*
from mytable t
where t.year = (
select max(t1.year) from mytable t1 where t1.parent_id = t.parent_id
)
INNER JOIN
和子查询,该查询将parent_id
的值分组并根据需要最大化它们。SELECT TEST.*
FROM TEST
INNER JOIN ( SELECT MAX (YEAR) MAXYEAR, PARENT_ID
FROM TEST
GROUP BY PARENT_ID) TMAX
ON TMAX.PARENT_ID = TEST.PARENT_ID AND TMAX.MAXYEAR = TEST.YEAR