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

SQL सर्वर में न्यूनतम और अधिकतम तिथियां प्राप्त करने के लिए समान वस्तुओं को अलग-अलग दिनांक सीमाओं में समूहित करें

यह आपको आगे बढ़ाना चाहिए:

CREATE TABLE Account (AccountID bigint,
                      onln_status varchar(3),
                      BrowseStatus char(1),
                      Beg_date date,
                      End_Date date);
GO

INSERT INTO Account
SELECT A, O, B, CONVERT(date,S,101), CONVERT(date,E,101)
FROM (
    VALUES (123456789,'On','Y','1/1/2018','2/1/2018'),
           (123456789,'On','N','2/2/2018','4/1/2018'),
           (123456789,'On','Y','4/2/2018','5/1/2018'),
           (123456789,'Off','N','5/2/2018','7/1/2018'),
           (123456789,'Off','Y','7/2/2018','8/1/2018'),
           (123456789,'On','Y','8/2/2018','10/1/2018'),
           (123456789,'On','N','10/2/2018','11/1/2018')) V(A, O, B, S, E);
GO

WITH Grps AS(
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY Beg_date) - --You may need to add a PARTITION here (I.e. on AccountID)
           ROW_NUMBER() OVER (PARTITION BY onln_status ORDER BY Beg_date) AS Grp --You may need to add a PARTITION here (I.e. on AccountID)
    FROM Account)
SELECT AccountID,
       onln_status,
       MIN(beg_date) AS beg_date,
       MAX(End_date) AS End_Date
FROM Grps
GROUP BY AccountID,
          onln_status,
          Grp;

GO
DROP TABLE Account;

ROW_NUMBER() . के उपयोग पर मेरी टिप्पणियों पर ध्यान दें यद्यपि। आपको और विभाजन जोड़ने की आवश्यकता हो सकती है।




  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. SQL सर्वर - [चयन] लॉक [अद्यतन] करता है?

  3. केवल उन फ़ाइलों के माध्यम से लूप कैसे करें जो एसएसआईएस पैकेज का उपयोग करके गंतव्य में मौजूद नहीं हैं?

  4. WHERE col IN (...) कंडीशन पर सीमा

  5. SQL - डुप्लीकेट होने पर नवीनतम रिकॉर्ड का चयन करें