我有 2 个表,Car_Table 和 History_Table。当所有汽车的状态设置为损坏时,我希望能够为所有汽车选择最后一个历史记录项目。
表格如下
Car_Table
Car_ID Driver_Name Car_Status
1 Alan Broken
2 Dave Broken
和
History_Table
id Date Notes Car_Id
1 01-01-2017 Change oil 1
2 02-01-2017 Check Brakes 1
3 02-01-2017 Service 2
3 03-01-2017 Cleaning 2
当我做
select Car_Table.Driver_Name,History_Table.Notes from Car_Table
inner join History_Table on Car_Table.Car_ID = History_Table.CarID
where Car_Table.Car_Status = 'Broken'
我得到了所有的历史记录。有没有办法获取每辆状态为“损坏”的汽车的最后一个历史项目?
您可以使用该left join
技术找到每辆车的最大日期行,然后将其与 Car_table 连接:
select Car_Table.Driver_Name,
History_Table.Notes
from Car_Table
inner join (
select h1.*
from History_Table h1
left join History_Table h2 on h1.Car_ID = h2.Car_ID
and h1.date < h2.date
where h2.Car_ID is null
) History_Table on Car_Table.Car_ID = History_Table.CarID
where Car_Table.Car_Status = 'Broken';
请参阅官方 MySQL 站点以获取替代解决方案(在相关和不相关子查询中使用聚合,这可能比上述解决方案慢)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句