Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Chọn các hàng có giá trị cột đã thay đổi

Tôi nghĩ đây là những gì bạn đang theo đuổi:

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

Điều này có thể chậm nếu tập kết quả lớn và không có chỉ số hỗ trợ tốt ...

CHỈNH SỬA

À, chờ một chút, các giá trị tăng lên và giảm xuống, không chỉ tăng ... nếu đúng như vậy, bạn có thể thử cách tiếp cận chậm hơn nhiều này:

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;

Kết quả:

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. cách gán giá trị cte cho biến

  2. Tại sao truy vấn T-SQL thứ 2 chạy nhanh hơn nhiều so với truy vấn đầu tiên khi được gọi bởi Reporting Services 2005 trong một ứng dụng web

  3. Sp_reset_connection làm gì?

  4. Tránh bế tắc bằng cách sử dụng gợi ý NOLOCK

  5. Cách sử dụng thuật sĩ nhập / xuất trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 104