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

时间:2018-03-05 00:57:39

标签: sql sql-server

请考虑以下 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

2 个答案:

答案 0 :(得分: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 :(得分: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