Select 每个员工的 max(date) 辆车

Select car of max(date) for every employee

我需要以下问题的代码:

我有一个 table 这样的:

Employee Year Month Car
Tom 2021 9 Ford
Tom 2021 10 Ford
Tom 2021 11 Ford
Tom 2021 12 Renault
Tom 2022 1 Renault
Mark 2021 12 VW
Mark 2022 1 VW
Mark 2022 2 VW
Joe 2021 8 Opel
Joe 2021 9 Tesla
Joe 2021 10 Ferrari

而且我需要员工在最后可能的日期使用的汽车。所以结果应该是:

Employee Car
Tom Renault
Mark VW
Joe Ferrari

有:

select employee, max(year || month) from table.cars
group by employee

我得到每个员工的最大(日期),但我不知道如何加入汽车到最大(日期)。

怎样才能得到我想要的结果?

可以使用ROW_NUMBER()解析函数如

SELECT Employee, Car
  FROM (SELECT ROW_NUMBER() OVER 
                           (PARTITION BY Employee ORDER BY year DESC, month DESC) AS rn,
               c.*
          FROM cars c)
 WHERE rn = 1

前提是年月的数据类型是字符串类型,那么可以把ORDER BY year DESC, month DESC部分替换成

ORDER BY TO_NUMBER(TRIM(year)) DESC, TO_NUMBER(TRIM(month)) DESC

with t as
(
  select *,
        row_number() over (partition by employee order by year desc, month desc) rn
  from cars 
) 
select employee, car 
from t
where rn = 1

试试这个:

select employee, car 
from ( 
        Select *, ROW_NUMBER(partition by employee order by year, month DESC) as row_number
        from cars
        )a
Where row_number = 1