簡體   English   中英

T-SQL運行總和

[英]T-SQL Running Sum

考慮以下形狀的表(wallet, client, date) ,其中walletclientstringsdate是直到今天的任何日期。 假設有人想獲得唯一客戶和客戶今年的每個月的總和,按錢包和月份分組。 我已經嘗試了幾種方法,包括分區,但是我無法使其正常工作。

結果將是這樣的:

+------------+---------+------------+---------+
|    Wallet  |  Unique |  Count     | Month   |
+------------+---------+------------+---------+
| Wallet1    | 2       |   5        |   1     | - For < 01022019
+------------+---------+------------+---------+
| Wallet1    | 3       |   7        |   2     | - For < 01032019
+------------+---------+------------+---------+

等等。 我嘗試了很多事情,甚至進行了分區,但都失敗了。 我只設法在日期以下使用WHERE使其變成幾個小查詢,這絕對可怕,例如

INSERT INTO 
    tmp_tbl_filtered
SELECT
    [Wallet],
    COUNT(DISTINCT [Client]) AS [unique],
    COUNT([Client]) AS [count],
    1 AS [month]
FROM
    tmp_tbl
WHERE [Date] < '20190201'
GROUP BY  [Wallet]
ORDER BY [Wallet]

INSERT INTO 
    tmp_tbl_filtered
SELECT
    [Wallet],
    COUNT(DISTINCT [Client]) AS [unique],
    COUNT([Client]) AS [count],
    2 AS [month]
FROM
    tmp_tbl
WHERE [Date] < '20190301'
GROUP BY  [Wallet]
ORDER BY [Wallet]

如果我做對了

SELECT [Wallet], [month]
   , SUM([unique]) OVER(PARTITION BY [Wallet] ORDER BY [month]) [unique_rt]
   , SUM([count]) OVER(PARTITION BY [Wallet] ORDER BY [month]) [count_rt]
FROM (
    --  group data of the current year 2019 by wallet and month
    SELECT 
        [Wallet],
        DATEPART(month,[Date]) AS [month],
        COUNT(DISTINCT [Client]) AS [unique],
        COUNT([Client]) AS [count]
    FROM
        tmp_tbl
    WHERE [Date] >= '20190101'
    GROUP BY [Wallet], DATEPART(month,[Date])
) t
ORDER BY [Wallet], [month]

我看不到累積部分在哪里發揮作用。

SELECT YEAR(date), MONTH(date), Wallet,
       COUNT(DISTINCT [Client]) AS [unique],
       COUNT([Client]) AS [count],
FROM tmp_tbl
WHERE [Date] < '20190301'
GROUP BY YEAR(date), MONTH(date), [Wallet]
ORDER BY Wallet, YEAR(date), MONTH(date)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM