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

समतल प्रतिच्छेदन समय अवधि

यहाँ केवल एक SQL समाधान है। मैंने कॉलम के लिए DATETIME का उपयोग किया। मेरी राय में समय को अलग रखना एक गलती है, क्योंकि आधी रात के बाद समय बीतने पर आपको समस्या होगी। जरूरत पड़ने पर आप उस स्थिति को संभालने के लिए इसे समायोजित कर सकते हैं। समाधान यह भी मानता है कि प्रारंभ और समाप्ति समय न्यूल नहीं हैं। दोबारा, यदि ऐसा नहीं है तो आप आवश्यकतानुसार समायोजित कर सकते हैं।

समाधान का सामान्य सार उन सभी प्रारंभ समयों को प्राप्त करना है जो किसी भी अन्य स्पैन के साथ ओवरलैप नहीं होते हैं, सभी अंत समय प्राप्त करते हैं जो किसी भी स्पैन के साथ ओवरलैप नहीं होते हैं, फिर दोनों को एक साथ मिलाते हैं।

परिणाम आपके अपेक्षित परिणामों से मेल खाते हैं, एक मामले को छोड़कर, जो हाथ से जाँचने पर ऐसा लगता है कि आपके अपेक्षित आउटपुट में कोई गलती है। 6 तारीख को एक अवधि होनी चाहिए जो 2009-06-06 10:18:45.000 पर समाप्त हो।

SELECT
     ST.start_time,
     ET.end_time
FROM
(
     SELECT
          T1.start_time
     FROM
          dbo.Test_Time_Spans T1
     LEFT OUTER JOIN dbo.Test_Time_Spans T2 ON
          T2.start_time < T1.start_time AND
          T2.end_time >= T1.start_time
     WHERE
          T2.start_time IS NULL
) AS ST
INNER JOIN
(
     SELECT
          T3.end_time
     FROM
          dbo.Test_Time_Spans T3
     LEFT OUTER JOIN dbo.Test_Time_Spans T4 ON
          T4.end_time > T3.end_time AND
          T4.start_time <= T3.end_time
     WHERE
          T4.start_time IS NULL
) AS ET ON
     ET.end_time > ST.start_time
LEFT OUTER JOIN
(
     SELECT
          T5.end_time
     FROM
          dbo.Test_Time_Spans T5
     LEFT OUTER JOIN dbo.Test_Time_Spans T6 ON
          T6.end_time > T5.end_time AND
          T6.start_time <= T5.end_time
     WHERE
          T6.start_time IS NULL
) AS ET2 ON
     ET2.end_time > ST.start_time AND
     ET2.end_time < ET.end_time
WHERE
     ET2.end_time IS NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्सएमएलएनएस के साथ ओपनएक्सएमएल:डीटी

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

  3. TSQL md5 हैश C# .NET md5 से अलग है

  4. डेटाग्रिडव्यू के सभी डेटा को एक बार में डेटाबेस में डालें

  5. दो स्तंभों के संयोजन के लिए अद्वितीय बाधा जोड़ें