Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक तालिका में लापता समय अंतराल खोजें

निम्नलिखित को काम करना चाहिए और डिवाइसिड के लिए केवल एक रिकॉर्ड नहीं लौटाना चाहिए।

इसका सार यह है कि

  • प्रत्येक रिकॉर्ड में एक पंक्ति संख्या जोड़ें, जो Date के अनुसार क्रमित हो और प्रत्येक DeviceID . के लिए पुनः प्रारंभ करना ।
  • दो मूल पंक्तियों के संयोजन वाली पंक्तियों के साथ परिणाम बनाने के लिए स्वयं के साथ जुड़ें। प्रत्येक पंक्ति के स्तंभों के बीच का संबंध पंक्ति संख्या (+1) और DeviceID है ।
  • केवल उन्हीं पंक्तियों को बनाए रखें जहां संबंधित Date 15 मिनट से अधिक है।

एसक्यूएल स्टेटमेंट

;WITH t AS (
  SELECT  *, rn = ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY Date)
  FROM    TestTable
)  
SELECT  t1.DeviceID, t1.Date, t2.Date
FROM    t t1
        INNER JOIN t t2 ON t2.DeviceID = t1.DeviceID AND t2.rn = t1.rn + 1
WHERE   DATEDIFF(MINUTE, t1.Date, t2.Date) > 15        

परीक्षण स्क्रिप्ट

;WITH TestTable (ID, DeviceID, Date, Value) AS (
  SELECT 1, 3, '2011-08-24 00:00:00', 0.51 UNION ALL
  SELECT 2, 3, '2011-08-24 00:15:00', 2.9 UNION ALL
  SELECT 3, 3, '2011-08-24 00:30:00', 0 UNION ALL
  SELECT 4, 3, '2011-08-24 00:45:00', 7.1 UNION ALL
  SELECT 5, 3, '2011-08-24 01:00:00', 1.05 UNION ALL
  SELECT 6, 3, '2011-08-24 03:15:00', 3.8 
)
, t AS (
  SELECT  *, rn = ROW_NUMBER() OVER (PARTITION BY DeviceID ORDER BY Date)
  FROM    TestTable
)  
SELECT  t1.DeviceID, t1.Date, t2.Date
FROM    t t1
        INNER JOIN t t2 ON t2.DeviceID = t1.DeviceID AND t2.rn = t1.rn + 1
WHERE   DATEDIFF(MINUTE, t1.Date, t2.Date) > 15        



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर 2016

  2. नया कॉलम जोड़ने के बाद SQL सर्वर अमान्य कॉलम नाम

  3. एसक्यूएल क्वेरी एक 3 टेबल में डुप्लिकेट मानों को हटाने के लिए दो अलग-अलग डेटाबेस के साथ आंतरिक रूप से जुड़ती है

  4. SQL सर्वर प्रबंधन स्टूडियो में SQL को प्रारूपित करें

  5. टी-एसक्यूएल में स्लीप कमांड?