获取具有许多条目的对象的列的最后一个值

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

请考虑以下Repair_Table的汽车维修车间。

我想在给定的一天内获得每辆车的最后一次“Repair_Status”值。

“Repair_Update”列将在汽车修理过程中为每次更改添加一个新条目:如修复状态,修复名称或修复团队以及修复子任务,这些更改存储在不同的表中。

我尝试了这个查询,但它没有给我我需要的东西:

select distinct(Car_ID), Repair_Status
from Repair_Table r1
left join (select Car_ID, max(Repair_Update) from Repair_Table 
group by Car_ID) r2
on r2.Repair_Update = r1.Repair_Update
where convert(date,Repair_Start) = '20180122'

enter image description here

sql sql-server
2个回答
1
投票

窗口函数是一种简单的方法:

select rt.*
from (select rt.*,
             row_number() over (partition by car_id, cast(repair_update as date)
                                order by repair_update desc
                               ) as seqnum
      from Repair_Table rt
      where convert(date, Repair_Start) = '20180122'
     ) rt
where seqnum = 1;

如果您希望在多个日期 - 甚至所有日期都需要此信息,则可以删除where子句。


1
投票

使用row_number()函数:

select Car_ID, Repair_Status
from (
    select Car_ID, Repair_Status
    row_number() over (partition by Car_ID order by Repair_Update desc) as rnk
    from Repair_Table
  ) t
where t.rnk = 1
© www.soinside.com 2019 - 2024. All rights reserved.