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

प्रत्येक अवलोकन में न्यूनतम तिथि की जांच कैसे करें और ध्वज को गतिशील रूप से अपडेट करें

चूंकि यह मूल प्रश्न है - मैं यहां उत्तर पोस्ट कर रहा हूं। मैं आपके सभी छोरों को एक साथ खोदने का सुझाव दूंगा। ये रहा 2 CTE और ZERO लूप वाला तरीका।

declare @table table (ID int, StartDate date, EndDate date)
Insert Into @table
(
    ID
    , StartDate
    , EndDate
)
Values
(1,     '2017-01-01',    '2017-02-01'),
(1,     '2017-01-09',    '2017-01-28'),
(1,     '2017-04-01',    '2017-04-30'),
(1,     '2017-04-05',    '2017-05-20'),
(1,     '2017-04-20',    '2017-06-12'),
(2,     '2017-06-02',    '2017-06-20'),
(2,     '2017-06-14',    '2017-07-31'),
(2,     '2017-06-14',    '2017-07-31'),
(2,     '2017-06-19',    '2017-07-31'),
(2,     '2017-06-19',    '2017-07-31')


;with cte as(
select
    t1.ID
    ,t1.StartDate
    ,t1.EndDate
    ,DT = (select min(StartDate) from @table t2  where t2.StartDate > DATEADD(day,30,t1.StartDate))
from
    @table t1),

cte2 as(
select
    ID
    ,StartDate
    ,EndDate
    ,dense_rank() over (order by isnull(DT,(select max(StartDate) from cte))) as Flag
from
    cte)

select 
    ID
    ,StartDate
    ,EndDate
    ,case when Flag % 2 = 0 then 2 else Flag % 2 end as Flag
from cte2


  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. मिलीसेकंड में GETDATE () और SYSDATETIME () के बीच डेटिफ़ हमेशा अलग क्यों होता है?

  3. एक्सएमएल स्पष्टीकरण के लिए टीएसक्यूएल

  4. मैं एक प्रकार से अस्थायी तालिका कैसे बना सकता हूं?

  5. SQL सर्वर CRUD संचालन