选择每个员工最新日期的汽车。

15 浏览
0 Comments

选择每个员工最新日期的汽车。

我需要解决以下问题的代码:

我有一个类似这样的表:

员工 年份 月份 汽车
汤姆 2021 9 福特
汤姆 2021 10 福特
汤姆 2021 11 福特
汤姆 2021 12 雷诺
汤姆 2022 1 雷诺
马克 2021 12 大众
马克 2022 1 大众
马克 2022 2 大众
2021 8 欧宝
2021 9 特斯拉
2021 10 法拉利

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

员工 汽车
汤姆 雷诺
马克 大众
法拉利

使用以下代码:

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

我可以为每个员工获取最大日期,但我不知道如何将汽车与最大日期联接起来。

如何获得我想要的结果?

0
0 Comments

问题的出现原因:在给定的数据表中,需要根据每个雇员的最新日期选择对应的汽车。然而,由于数据表中存在多个日期和汽车的组合,因此需要找到每个雇员的最新日期,并从中选择对应的汽车。

解决方法:通过使用子查询和窗口函数,可以解决这个问题。子查询中的SELECT语句用于添加一个额外的列,即每个雇员的行号(根据日期以降序排列)。然后,在外部查询中,只选择行号为1的记录,即每个雇员的最新汽车。

以下是解决问题的SQL查询代码:

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

以上查询将返回每个雇员的最新日期对应的汽车。

0
0 Comments

问题的出现原因:出现了这个问题的原因是因为需要找到每个员工最新的一辆汽车,但是在现有的代码中并没有明确指定要选择最大日期的汽车。

解决方法:为了解决这个问题,可以使用窗口函数 row_number() 来对每个员工的汽车按照日期倒序排列,并为每个汽车分配一个行号。然后,通过在外部查询中筛选行号为1的汽车,即可选择每个员工最新的一辆汽车。

最终的解决方案如下:

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

这段代码使用了 row_number() 函数来为每个员工的汽车分配一个行号,行号的排序方式是按照年份和月份倒序排列。然后,在外部查询中,通过筛选行号为1的汽车,即可找到每个员工最新的一辆汽车。

需要注意的是,代码中还存在一个错误,就是缺少了 as 关键字。这个问题需要修复,修复后的代码如上所示。

通过这个解决方案,就可以实现选择每个员工最新的一辆汽车。

0
0 Comments

问题的出现原因是需要选择每个员工最新的一辆车,但是数据中没有直接提供每个员工最新车辆的日期信息。解决方法是使用ROW_NUMBER()分析函数来对数据进行排序和编号,然后选择编号为1的记录,即每个员工最新的车辆。

在解决方法中,首先使用ROW_NUMBER()函数对数据进行排序和编号。PARTITION BY语句指定按照员工进行分组,ORDER BY语句指定按照年份和月份降序排序。然后将排序后的结果作为子查询,并选择编号为1的记录作为每个员工最新的车辆。

如果年份和月份的数据类型为字符串类型,需要将其转换为数值类型进行排序。可以使用TO_NUMBER()函数将字符串转换为数值,并使用TRIM()函数去除字符串中的空格。将这段代码替换解决方法中的ORDER BY语句,即可按照数值类型进行排序。

通过使用ROW_NUMBER()分析函数来对数据进行排序和编号,可以解决选择每个员工最新车辆的问题。

0