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. SQL सर्वर में लेनदेन का सही उपयोग

  2. एक्सेल डेटा से इंसर्ट स्टेटमेंट कैसे जेनरेट करें और SQL सर्वर टेबल में लोड करें - SQL सर्वर / TSQL ट्यूटोरियल पार्ट 103

  3. मैं SQL Server 2000 में एकल स्ट्रोक वाले सभी तालिकाओं के लिए स्क्रिप्ट कैसे उत्पन्न करूं?

  4. SQL सर्वर में डेटाटाइम के रूप में डिलीमीटर के बिना डेटाटाइम स्ट्रिंग को कैसे परिवर्तित करें?

  5. URL से रिपोर्ट जनरेट करें - SQL सर्वर रिपोर्टिंग सेवाएँ 2008