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

ओवरलैपिंग दिनांक सीमाओं को हटाएं और कम करें

SQL सर्वर 2005+ के लिए

-- sample table with data
declare @t table(UserID int, StartDate datetime, EndDate datetime)
insert @t select
1, '20110101', '20110102' union all select
1, '20110101', '20110110' union all select
1, '20110108', '20110215' union all select
1, '20110220', '20110310' union all select
2, '20110101', '20110120' union all select
2, '20110115', '20110125'

-- your query starts below

select UserID, Min(NewStartDate) StartDate, MAX(enddate) EndDate
from
(
    select *,
        NewStartDate = t.startdate+v.number,
        NewStartDateGroup =
            dateadd(d,
                    1- DENSE_RANK() over (partition by UserID order by t.startdate+v.number),
                    t.startdate+v.number)
    from @t t
    inner join master..spt_values v
      on v.type='P' and v.number <= DATEDIFF(d, startdate, EndDate)
) X
group by UserID, NewStartDateGroup
order by UserID, StartDate

नोट:

  1. बदलें @t अपने टेबल नाम के साथ



  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. डेटाबेस में आईडी फ़ील्ड के लिए INT बनाम विशिष्ट-पहचानकर्ता

  3. SELECT INTO . में ORDER BY संरक्षित करना

  4. SQL सर्वर में आसानी से मास्टर डेटाबेस को फिर से बनाने के तरीके

  5. OPENJSON "'के साथ' कीवर्ड के पास गलत सिंटैक्स।" SQL सर्वर में (हल किया गया)