【问题标题】:Most recent record MS SQL最新记录 MS SQL
【发布时间】:2020-12-22 01:47:36
【问题描述】:

只需要最近的记录

当前数据:

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 的最新记录。谢谢

【问题讨论】:

    标签: sql-server datetime left-join greatest-n-per-group window-functions


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2021-04-17
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2012-11-11
      相关资源
      最近更新 更多