sql >> Databasteknik >  >> RDS >> Sqlserver

Välj rader där kolumnvärdet har ändrats

Jag tror att det här är vad du är ute efter:

;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;

Detta kan vara långsamt om resultatuppsättningen är stor och det inte finns ett bra stödindex...

REDIGERA

Ah, vänta en sekund, värdena går upp och ner, inte bara upp... om så är fallet kan du prova detta mycket långsammare tillvägagångssätt:

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;

Resultat:

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. Slumptal i MySQL-kolumnen

  2. Hur får jag ett antal associerade rader i en vänsterkoppling i MySQL?

  3. Heroku Postgres:psql:FATAL:ingen pg_hba.conf-post för värd

  4. Installera PostgreSQL på Ubuntu för Ruby on Rails