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

प्रति दिन सटीक ट्रैक समय प्राप्त करने के लिए निम्न क्वेरी में ओवरलैप अंतराल को कैसे छोड़ें

यह एक "अंतराल और द्वीप" समस्या है। मैंने अपना खुद का परीक्षण डेटा नकली किया (चूंकि आपने कोई भी प्रदान नहीं किया), लेकिन मुझे लगता है कि यह काम करता है। मुख्य अंतर्ज्ञान यह है कि एक ही "द्वीप" (अर्थात, सन्निहित समय अंतराल) के भीतर सभी मूल्यों में एक पंक्ति_नंबर () कॉलम से समान अंतर होगा। यदि आप इसमें थोड़ी अंतर्दृष्टि चाहते हैं, तो IntervalsByDay . से एक कच्चा चयन करें सीटीई (अब मेरे पास मौजूद सबक्वायरी के विपरीत); यह आपको परिकलित द्वीप (आरंभ और समाप्ति बिंदुओं के साथ) दिखाएगा।

संपादित करें:मैंने नहीं देखा कि पहली बार घूमने पर आपके पास एक पहेली थी। आपके डेटा और वांछित आउटपुट को दर्शाने के लिए मेरा उत्तर बदल दिया गया है

with i as (
    select datediff(minute, '2013-01-01', StartTime) as s,
        datediff(minute, '2013-01-01', EndTime) as e
    from #track
), brokenDown as (
    select distinct n.Number
    from i
    join dbadmin.dbo.Numbers as n
        on n.Number >= i.s
        and n.Number <= i.e
), brokenDownWithID as (
    select Number, Number - row_number() over(order by Number) as IslandID,
        cast(dateadd(minute, number, '2013-01-01') as date) as d
    from brokenDown
), IntervalsByDay as (
    select
        dateadd(minute, min(number), '2013-01-01') as [IntervalStart],
        dateadd(minute, max(number), '2013-01-01') as [IntervalEnd],
        d,
        max(Number) - min(Number) + 1 as [NumMinutes]
    from brokenDownWithID
    group by IslandID, d
)
select d, sum(NumMinutes) as NumMinutes
from IntervalsByDay
group by d
order by d



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Azure पर SQL सर्वर के साथ शुरुआत कैसे करें

  2. क्या कोई विदेशी कुंजी NULL और/या डुप्लिकेट हो सकती है?

  3. पूर्णांक को फ्लोटिंग पॉइंट में बदलना और दशमलव बिंदु जोड़ना

  4. लिंक्ड सर्वर इंसर्ट-सेलेक्ट परफॉर्मेंस

  5. सी # से डेटाबेस को कैसे पुनर्स्थापित करें