Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изберете редове, където стойността на колоната е променена

Мисля, че това е, което преследвате:

;WITH x AS
(
  SELECT value, time, rn = ROW_NUMBER() OVER 
  (PARTITION BY Value ORDER BY Time)
  FROM dbo.table
)
SELECT * FROM x WHERE rn = 1;

Това може да е бавно, ако наборът от резултати е голям и няма добър поддържащ индекс...

РЕДАКТИРАНЕ

А, изчакайте малко, стойностите вървят нагоре и надолу, не само нагоре... ако случаят е такъв, можете да опитате този много по-бавен подход:

DECLARE @x TABLE(value INT, [time] DATETIME)

INSERT @x VALUES
(0,'20120615 8:03:43 PM'),--
(1,'20120615 8:03:43 PM'),--*
(1,'20120615 8:03:48 PM'),--
(1,'20120615 8:03:53 PM'),--
(1,'20120615 8:03:58 PM'),--
(2,'20120615 8:04:03 PM'),--*
(2,'20120615 8:04:08 PM'),--
(3,'20120615 8:04:13 PM'),--*
(3,'20120615 8:04:18 PM'),--
(3,'20120615 8:04:23 PM'),--
(2,'20120615 8:04:28 PM'),--*
(2,'20120615 8:04:33 PM');

;WITH x AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY time)
  FROM @x
)
SELECT x.value, x.[time]
FROM x LEFT OUTER JOIN x AS y
ON x.rn = y.rn + 1
AND x.value <> y.value
WHERE y.value IS NOT NULL;

Резултати:

value  time
-----  -----------------------
1      2012-06-15 20:03:43.000
2      2012-06-15 20:04:03.000
3      2012-06-15 20:04:13.000
2      2012-06-15 20:04:28.000


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на имена на таблици, които са запазени думи/ключови думи в MS SQL Server

  2. Създаване на нова база данни от резервно копие на друга база данни на същия сървър?

  3. SQL Server 2008 FullTextSearch Липсва един знак в името от резултатите

  4. SQL Server форматира десетичните знаци със запетаи

  5. Php с SQL Server