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

MULTIPLE उपसमूह एकत्रीकरण बनाना

मुझे लगता है कि मूल रूप से वही विचार है जो पहले के प्रश्न में था। आप किसी दिए गए रिकॉर्ड से पहले किए गए रिकॉर्ड की संख्या को सख्ती से गिनना चाहते हैं। यह आपको एक समूह पहचानकर्ता देता है जिसे बाद में एकत्रीकरण के लिए उपयोग किया जा सकता है।

SQL सर्वर 2012+ में, आप संचयी योग कार्यक्षमता का उपयोग करेंगे। पुराने संस्करणों में, आप सहसंबद्ध सबक्वेरी या बाहरी आवेदन के साथ भी ऐसा ही कर सकते हैं।

यह संस्करण आपके उपरोक्त को कई तरह से संशोधित करता है। विशेष रूप से, यह grp . को परिभाषित करने के तर्क को सरल करता है . मैं आसानी से नहीं देखता कि कैसे row_number() क्वेरी में फिट बैठता है। मैं तर्क को समझता हूं - किए गए कार्यों की गणना करता हूं और एकत्रीकरण के लिए इसका उपयोग करता हूं। लेकिन, समूह में सभी पंक्तियों पर वह मान प्राप्त करना गैर-तुच्छ है।

SELECT r.Key, a.CYCLE_BEGIN_DATE, a.CYCLE_END_DATE, a.NUM_ACTIONS_IN_CYCLE
FROM Records r LEFT OUTER JOIN
     (select a.key, a2.grp, min(Date) as CYCLE_BEGIN_DATE,
             max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
             count(*) as NUM_ACTIONS_IN_CYCLE
      from actions a outer apply
           (select count(*) as grp
            from actions a2
            where a2.key = a.key and a2.date < a.date and a2.action = 'Done'
           ) a2
     group by a.key, a2.grp
    ) a
    on r.key = a.key;



  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 सर्वर:क्वेरी को .txt फ़ाइल के रूप में निर्यात करें

  3. SQL Server 2008 भूगोल डेटा प्रकार का उपयोग क्यों करें?

  4. PHP घातक त्रुटि:अपरिभाषित फ़ंक्शन mssql_query () पर कॉल करें

  5. GUID के लिए SCOPE_IDENTITY ()?