当前位置: 代码迷 >> Sql Server >> SQL,连续重复的取最后一条
  详细解决方案

SQL,连续重复的取最后一条

热度:11   发布时间:2016-04-24 09:17:04.0
求一个SQL,连续重复的取最后一条。
本帖最后由 u013008391 于 2015-03-26 13:55:10 编辑

按GPSTime排序,PassengerState连续,比如0变1(1变0),0和1最后一条记录都要保留。
不同VehicleSimID之间不参与比较
------解决思路----------------------
;WITH CTE AS(
SELECT *
,ROW_NUMBER()OVER(PARTITION BY VehicleSimID ORDER BY GPSTime)RN1
,ROW_NUMBER()OVER(PARTITION BY VehicleSimID,PassengerState ORDER BY GPSTime)RN2
FROM TB
)
,CTE2 AS(
SELECT *
,ROW_NUMBER()OVER(PARTITION BY VehicleSimID,RN1-RN2 ORDER BY GPSTime)RN
FROM CTE
)
SELECT VehicleSimID,GPSTime,PassengerState
FROM CTE2
WHERE RN=1
SQL2005+
------解决思路----------------------
WITH t AS ( -- 分组排序号
    SELECT *,
           ROW_NUMBER()OVER(PARTITION BY VehicleSimID ORDER BY GPSTime) rn
      FROM table1
)
-- 下一条不存在或下一条的PassengerState不同,就是重复的最后一条。
    SELECT t1.*
      FROM t t1
 LEFT JOIN t t2
        ON t1.VehicleSimID = t2.VehicleSimID
       AND t1.rn = t2.rn - 1
     WHERE t2.PassengerState IS NULL
        OR t2.PassengerState <> t1.PassengerState
  相关解决方案