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

टीएसक्यूएल में चल रहे कुल का अधिकतम मूल्य प्राप्त करने का प्रदर्शनकारी तरीका

SQL Server चल रहे कुल योग की गणना करने में बेकार है।

यहां आपकी क्वेरी के लिए एक समाधान दिया गया है (जो तारीखों के अनुसार समूहित करता है):

WITH    q AS
        (
        SELECT  TranxDate, SUM(TranxAmt) AS TranxSum
        FROM    t_transaction
        GROUP BY
                TranxDate
        ),
        m (TranxDate, TranxSum) AS
        (
        SELECT  MIN(TranxDate), SUM(TranxAmt)
        FROM    (
                SELECT  TOP 1 WITH TIES *
                FROM    t_transaction
                ORDER BY
                        TranxDate
                ) q
        UNION ALL
        SELECT  DATEADD(day, 1, m.TranxDate),
                m.TranxSum + q.TranxSum
        FROM    m
        CROSS APPLY
                (
                SELECT  TranxSum
                FROM    q
                WHERE   q.TranxDate = DATEADD(day, 1, m.TranxDate) 
                ) q
        WHERE   m.TranxDate <= GETDATE()
        )
SELECT  TOP 1 *
FROM    m
ORDER BY
        TranxSum DESC
OPTION (MAXRECURSION 0)

आपको जरूरत TranxDate . पर एक इंडेक्स रखने के लिए इसके लिए तेजी से काम करें।




  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. फ़ंक्शन परिणाम द्वारा SQLAlchemy आदेश

  3. SQL सर्वर आंतरिक:समस्याग्रस्त ऑपरेटर्स पं। III - सॉर्ट

  4. गतिशील एसक्यूएल का उपयोग किए बिना टी-एसक्यूएल गतिशील उपनाम

  5. क्लस्टर्ड और नॉन-क्लस्टर इंडेक्स के बीच अंतर क्या हैं?