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