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

इसके साथ समूह पंक्तियाँ 15 दिनों से कम अलग हैं और न्यूनतम/अधिकतम दिनांक निर्दिष्ट करें

जैसा कि टिप्पणियों में बताया गया है, आप LAG . का उपयोग कर सकते हैं इसके लिए समारोह। मूल विचार प्रत्येक पंक्ति के लिए 0/1 मान निर्दिष्ट करना है:यदि यह पिछली पंक्ति के 15 दिनों के भीतर है तो 0 अन्य 1. फिर SUM() OVER () का उपयोग करें। 1s और 0s को संख्याओं में बदलने के लिए जिनका उपयोग समूहीकरण के लिए किया जा सकता है।

ध्यान दें कि यह बहुत लंबी दिनांक सीमाओं को एक साथ समूहित कर सकता है उदा. 01-01 , 01-11 , 01-21 , 02-01 और 02-11 पहली और आखिरी तारीखों में 15 दिनों से अधिक का अंतर होने के बावजूद एक साथ समूहबद्ध किया जाएगा।

DECLARE @T TABLE (HASTA_ID INT, PROTOKOL_ID INT, STARTDATE DATE, ENDDATE DATE);
INSERT INTO @T VALUES
(273065, 11, '2018-01-24', '2018-01-30'),
(273065, 12, '2018-01-25', '2018-02-10'),
(273065, 13, '2018-01-30', '2018-01-30'),
(273065, 14, '2018-02-23', '2018-02-28'),
(273065, 15, '2018-03-21', '2018-03-29'),
(273065, 16, '2018-05-03', '2018-05-04'),
(273065, 17, '2018-05-03', '2018-05-08'),
(273065, 18, '2018-05-14', '2018-05-22'),
(273065, 19, '2018-05-22', '2018-05-23'),
(273065, 20, '2018-09-20', '2018-09-30');

WITH CTE1 AS (
    SELECT *, CASE WHEN LAG(STARTDATE) OVER (PARTITION BY HASTA_ID ORDER BY STARTDATE) >= DATEADD(DAY, -14, STARTDATE) THEN 0 ELSE 1 END AS CHG
    FROM @T
), CTE2 AS (
    SELECT *, SUM(CHG) OVER (PARTITION BY HASTA_ID ORDER BY STARTDATE) AS GRP
    FROM CTE1
)
SELECT *,
    MIN(STARTDATE) OVER (PARTITION BY HASTA_ID, GRP) AS EX_STARTDATE,
    MAX(ENDDATE) OVER (PARTITION BY HASTA_ID, GRP) AS EX_ENDDATE
FROM CTE2
ORDER BY HASTA_ID, STARTDATE

डीबी फिडल पर डेमो




  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 सर्वर लेनदेन संबंधी प्रतिकृति समस्याओं का निवारण

  3. SqlCommand का उपयोग करके वापसी मूल्य

  4. SQL 2005 में संग्रहीत कार्यविधि में उपयोगकर्ता परिभाषित फ़ंक्शन बनाना

  5. एसक्यूएल सर्वर 2008 के बीच में नहीं होने पर डेटा कैसे सम्मिलित करें?