sql >> Database teknologi >  >> RDS >> Sqlserver

Effektiv måde at få den maksimale værdi af en løbende total i TSQL

SQL Server suger i at beregne løbende totaler.

Her er en løsning til netop din forespørgsel (som grupperer efter datoer):

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)

Du bruger at have et indeks på TranxDate for at dette fungerer hurtigt.




  1. Store_result og get_result for statement

  2. Installer pdo til postgres Ubuntu

  3. T-SQL Hvordan opretter man tabeller dynamisk i lagrede procedurer?

  4. Hvordan finder man det samlede tablespace-forbrug i SQL Server 2008?