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

पदानुक्रमित डेटा के लिए आवश्यक सीटीई कार्यान्वयन

आप एक ROW_NUMBER() कर सकते हैं PARTITION BY . के साथ और फिर rn =rn + 1 के साथ स्वयं जुड़ें और DATEDIFF . करें जिसके आधार पर आप अपने रिजल्ट को ग्रुप कर सकते हैं।

कुछ इस तरह का प्रयास करें

DECLARE @Rules TABLE(RuleId  INT,Name CHAR(3),    StartDate DATE,           EndDate DATE)

INSERT INTO @Rules VALUES
(3 ,'TP3', '3/18/2015', '11/28/2015'),
(3 ,'TP3', '11/28/2015', '4/30/2016'),
(3 ,'TP3', '4/30/2016', '10/5/2016'),
(3 ,'TP3', '10/25/2016', '11/15/2016'),
(3 ,'TP3', '11/15/2016', null) 


;WITH CTE AS 
(
SELECT ROW_NUMBER() OVER(PARTITION BY RuleID ORDER BY StartDate) rn,*
FROM @Rules
), CTE2 AS
(
SELECT ISNULL(DATEDIFF(day,C1.EndDate,C2.StartDate),0) diff,C1.*
FROM CTE C1 
LEFT JOIN CTE C2 ON C1.rn + 1 = C2.rn
 AND C1.RuleId = C2.RuleId
)
SELECT RuleId,Name,MIN(StartDate)  StartDate,NULLIF(MAX(CASE WHEN EndDate IS NULL THEN '2999/12/31' ELSE EndDate END),'2999/12/31') EndDate
FROM
(
SELECT C2.Diff,C1.RuleId,C1.Name,C1.StartDate,C1.EndDate
FROM CTE2 C1
CROSS APPLY (SELECT ISNULL(SUM(Diff),0) Diff FROM CTE2 C2 WHERE C1.StartDate > C2.StartDate AND C1.RuleId = C2.RuleId) C2
) C
GROUP BY RuleId,Name,Diff
ORDER BY RuleId,Diff



  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 Server 2005 डेटा को Excel में कैसे स्थानांतरित या निर्यात करते हैं?

  2. SQL 2005 में UTC और स्थानीय (यानी PST) समय के बीच प्रभावी रूप से दिनांक परिवर्तित करना

  3. HTTP त्रुटि 500.22 - आंतरिक सर्वर त्रुटि (एक ASP.NET सेटिंग का पता चला है जो एकीकृत प्रबंधित पाइपलाइन मोड में लागू नहीं होती है।)

  4. 3/4 कैरेक्टर इंटीजर को 24 घंटे के टाइम फॉर्मेट में कैसे बदलें और तारीख के साथ मिलाएं?

  5. My Select SUM क्वेरी शून्य लौटाती है। इसे 0 . वापस करना चाहिए