获取每个firstname lastname组的最新条目,最大年份为

vmjh9lq9  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(306)

我有一张如下的table:

firstName    lastName    updateYear      content       UUID
John           Doe          2010         .......      b2b31m
John           Doe          2010         .......      dksdf2
Jane           Doe          2015         .......      dsfs2k
Jane           Doe          2017         .......      eien1n
Jack           Doe          2019         .......      a2e93h

对于每个firstname-lastname对,我希望整行显示最大(最近)年份。如果最近一年有多个相同名字的条目,那么我最好输入最新的行(如果不可能,任何条目都可以)。
上表是这样的:

firstName    lastName    updateYear      content       UUID
John           Doe          2010         .......      dksdf2
Jane           Doe          2017         .......      eien1n
Jack           Doe          2019         .......      a2e93h
2guxujil

2guxujil1#

你不知道你用哪个数据库。一种非常方便有效的方法是使用行限制子查询进行过滤:

select t.*
from mytable t
where t.uuid = (
    select t1.uuid
    from mytable t1
    where t1.firstName = t.firstName and t1.lastName = t.lastName
    order by updateYear desc, uuid desc
    limit 1
)

如果您有一个定义“最新条目”的列,那么您可以使用它来代替 uuidorder by 子查询的子句。
在sql server中,您将使用 select top (1) ... 而不是 select ... limit 1 在子查询中。
请注意,根据您的数据库,有更整洁的选项可用。例如,如果你在运行postgres distinct on 很方便:

select distinct on (firstName, lastName) t.*
from mytable t
order by firstName, lastName, updateYear desc, uuid desc
xpcnnkqh

xpcnnkqh2#

这可以通过使用 row_number() . 请参阅下面的查询以获取您的答案

SELECT firstName
    ,lastName
    ,updateYear
    ,content
    ,UUID
FROM (
    SELECT *
        ,ROW_NUMBER() OVER (
            PARTITION BY firstName
            ,lastName ORDER BY updateYear DESC
            ) [row]
    FROM table_name
    ) a
WHERE a.row = 1

相关问题