按交易日期和产品ID的运行总计

时间:2018-10-01 12:30:35

标签: sql sql-server tsql analytics

使用MSSQL17,这是我正在进行的一项探索性工作,它按产品和服务查看销售情况,并计算一个月的总计。

试图弄清楚如何在此实例中按日期和产品ID汇总交易表中我的产品的查询,以重新创建类似的内容:

-------------------
Date            | ProductID | Sale Price |  Cumulative_Amount   | 
'2018-09-12'            1           1          1
'2018-09-12'            2           2          2
'2018-09-13'            1           1          2
'2018-09-13'            2           2          4    

此刻,我似乎已经完善了累计总金额只有一大笔钱的技巧,但似乎无法弄清楚如何针对每种产品重置此数值。产品和服务成本可能会发生变化,并且不会像上面一样始终保持不变。

我可以手动操作并查看excel等,但很想知道如何用SQL在将来节省时间,任何技巧或指针将不胜感激。

目前,我有以下内容:

SELECT
    [TransactionDate],
    [ProductID],
    [SalePrice],
    SUM (ActualSale) over (order by [TransactionDate],[ProductID] rows unbounded preceding) as Cumulative_Amount,    
FROM tTransactions
    WHERE [TransactionDate] BETWEEN '2018-09-10' AND '2018-09-15'

先谢谢您。

1 个答案:

答案 0 :(得分:3)

您需要partition by

SELECT . . . ,
       SUM(ActualSale) OVER (PARTITION BY ProductId
                             ORDER BY TransactionDate
                            ) as Cumulative_Amount,
FROM tTransactions
WHERE TransactionDate BETWEEN '2018-09-10' AND '2018-09-15';

请注意,不需要windowing子句。如果不存在,则默认为RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。如果您有重复的日期,这可能会误导您。如果这是一个问题,那么您明确包含了窗口框架:

SELECT . . . ,
       SUM(ActualSale) OVER (PARTITION BY ProductId
                             ORDER BY TransactionDate
                             ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                            ) as Cumulative_Amount,
FROM tTransactions
WHERE TransactionDate BETWEEN '2018-09-10' AND '2018-09-15';