【问题标题】:How to get the latest record from each group using group clause in sql server [duplicate]如何使用sql server中的组子句从每个组中获取最新记录[重复]
【发布时间】:2021-03-05 14:18:15
【问题描述】:

我想通过设备时间戳获取每个组订单的前 1 条记录,以便我可以获得每个设备/imei 的前 1 条记录。

SQL

select 
    o.DeviceTimeStamp, o.DeviceImei, o.OTI_A,OTI_T, 
    ts.latitude, ts.longitude 
from 
    Overview o
left join 
    TransformerLocations ts on o.DeviceImei = ts.imei
where 
    ts.latitude is not null
order by 
    o.DeviceTimeStamp desc

样本数据

2020-11-23 01:03:07.000 8673220311024   0   0   23.842163   91.280693
2020-11-23 01:01:06.000 8673220311024   0   0   23.842163   91.280693
2020-11-23 01:00:00.000 8645020301067   0   0   23.841940   91.280306

预期输出:

2020-11-23 01:03:07.000 8673220311024   0   0   23.842163   91.280693
2020-11-23 01:00:00.000 8645020301067   0   0   23.841940   91.280306

【问题讨论】:

    标签: sql sql-server datetime sql-order-by greatest-n-per-group


    【解决方案1】:

    获取每个设备/imei的前1条记录

    一个选项使用窗口函数:

    select *
    from (
        select o.devicetimestamp, o.deviceimei, o.oti_a,oti_t, 
            ts.latitude, ts.longitude,
            row_number() over(partition by o.deviceimei order by o.devicetimestamp desc) rn
        from overview o
        inner join transformerlocations ts on o.deviceimei = ts.imei
        where ts.latitude is not null
    ) t
    where rn = 1
    

    请注意,我将left join 更改为inner join:您在“右”表的where 子句中有一个条件,因此无论如何连接都表现为inner join

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多