[计数> 1时SQL选择大小写

问题描述 投票:1回答:2

我有一个看起来像下面的表格。

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会更大,我们仍然想返回今年的记录。我也无法根据年份进行选择,因为如果他们没有今年的记录,我们仍然需要他们每年的最新记录。

目前,我已经尝试过以六种方式选择此子集,但仅能使我的大脑受伤。任何帮助将不胜感激!

sql date select case greatest-n-per-group
2个回答
0
投票
这是一个典型的每组最多n个问题。要解决此问题,您需要考虑

过滤而不是聚合

一种便携式解决方案是使用相关子查询进行过滤,该子查询每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 )


0
投票
您还可以对表使用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

© www.soinside.com 2019 - 2024. All rights reserved.