【问题标题】:Previous and Next row record上一行和下一行记录
【发布时间】:2015-12-17 18:29:37
【问题描述】:

我有以下输出

ID   Number   Speed   LAT           LONG           DATETIME
101   AB01      15    73.066016     33.5840768     9/1/15 23:10
101   AB01      20    73.0619712    33.5871456     9/1/15 23:30
101   AB01      0     73.0722176    33.6007488     9/1/15 23:45
101   AB01      0     73.0722112    33.6007488     9/2/15 02:10
101   AB01      0     73.0722176    33.6007008     9/2/15 02:35
101   AB01      0     73.0722432    33.6007456     9/2/15 04:35
101   AB01      0     73.0721664    33.6007904     9/3/15 12:35
101   AB01      0     73.072192     33.6007488     9/3/15 13:35
101   AB01      0     73.072192     33.6007488     9/4/15 11:35
101   AB01      0     73.072192     33.6007488     9/4/15 14:35
101   AB01      1     73.072192     33.6007488     9/5/15 14:35

但需要的输出是

ID   Number   Speed   LAT           LONG           DATETIME
101   AB01      15    73.066016     33.5840768     9/1/15 23:10
101   AB01      20    73.0619712    33.5871456     9/1/15 23:30
101   AB01      0     73.0722176    33.6007488     9/1/15 23:45   
101   AB01      0     73.072192     33.6007488     9/4/15 14:35
101   AB01      1     73.072192     33.6007488     9/5/15 14:35

我想跳过额外的 0 速度值。如果我包括这些 0 零的查询响应时间增加。 代码尝试

SELECT   Distinct ID,Number,Speed,LAT,LONG,DATETIME
FROM        table
group by D,Number,Speed,LAT,LONG,DATETIME 

【问题讨论】:

  • 请包括您的编码尝试。
  • 你的问题是什么?你尝试了什么?您如何识别要过滤和保留的记录?
  • @EdwinStoteler Speed 0 表示车辆不会改变它们的位置。所以我想要位置和最后一站位置。

标签: sql-server sql-server-2012


【解决方案1】:

您可以使用LEADLAG 窗口函数来检测速度不连续性(如果这是您真正想要的):

SELECT ID, Number, Speed, LAT, [LONG], [DATETIME]
FROM (
  SELECT ID, Number, Speed, LAT, [LONG], [DATETIME],
         LEAD(Speed) OVER (PARTITION BY ID, Number
                           ORDER BY [DATETIME]) AS NextSpeed,
         LAG(Speed) OVER (PARTITION BY ID, Number
                           ORDER BY [DATETIME]) AS PrevSpeed         
  FROM mytable) AS t
WHERE Speed <> COALESCE(NextSpeed, -1) OR Speed <> COALESCE(PrevSpeed, -1)

Demo here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2020-11-26
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多