最新记录MS SQL
只需要最近的记录
当前数据:
RequestID RequestCreateDate VehID DeviceNum ProgramStatus InvID
1 08/12/2018 13:00:00:212 110 20178 Submitted A1
2 08/11/2018 11:12:33:322 110 20178 Pending A1
3 09/08/2018 4:14:28:132 110 Null Cancelled A1
4 11/11/2019 10:12:00:123 188 21343 Open B3
5 12/02/2019 06:15:00:321 188 21343 Submitted B3
请求结果:
RequestID RequestCreateDate VehID DeviceNum ProgramStatus InvID
3 09/08/2018 4:14:28:132 110 Null Cancelled A1
5 12/02/2019 06:15:00:321 188 21343 Submitted B3
InvID来自我要加入的表B。
以下是我当前正在尝试的查询,但存在重复记录:
Select
max(t1.RequestID) ReqID,
max(t1.RequestCreateDate) NewDate,
t1.VehID,
t1.DeviceNum,
t1.ProgramStatus,
t2.InvID
FROM table1 t1
LEFT JOIN table2 t2 ON t1.VehID = t2.VehID
GROUP BY t1.VehID, t1.DeviceNum, t1.ProgramStatus, t2.InvID
我只需要每个Vehid的最新记录。谢谢
解决方案
On选项是使用子查询进行筛选:
select t1.*, t2.invid
from table1
left join table2 t2 on t1.vehid = t1.vehid
where t1.requestCreateDate = (
select max(t11.requestCreateDate)
from table1 t11
where t11.vehid = t1.vehid
)
为提高性能,请考虑table1(vehid, requestCreateDate)
上的索引。
您还可以使用row_number()
:
select *
from (
select t1.*, t2.invid, row_number() over(partition by vehid order by requestCreateDate desc) rn
from table1
left join table2 t2 on t1.vehid = t1.vehid
) t
where rn = 1
相关文章