最新记录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来自我要加入的tableB。

这是我当前正在尝试的查询,但是记录重复:

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,t2.InvID 

我只需要每个VehID的最新记录。谢谢

解决方法

打开选项是使用子查询进行过滤:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...