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
我需要以下问题的代码:
我有一个 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