【问题标题】:Running Total on date column在日期列上运行总计
【发布时间】:2012-02-04 14:22:11
【问题描述】:

我的表中有以下数据:

id   invoice_id   date         ammount
1    1            2012-01-01    100.00
20   1            2012-01-31     50.00
470  1            2012-01-15    300.00

现在,我需要计算某个时期内发票的运行总计。因此,此数据样本的输出应如下所示:

id   invoice_id   date         ammount  running_total
1    1            2012-01-01    100.00         100.00
470  1            2012-01-15    300.00         400.00
20   1            2012-01-31     50.00         450.00

我尝试使用此示例http://www.sqlusa.com/bestpractices/runningtotal/ 和其他几个示例,但问题是我可以输入 id 20,日期 2012-01-31 和 id 120,日期 2012-01-01,然后我不能t 使用 NO = ROW_NUMBER(over by date)... 在第一次选择中,然后在第二次选择中使用 ID

【问题讨论】:

    标签: sql sql-server-2008 cumulative-sum


    【解决方案1】:
    DECLARE @DateStart DATE='2012-01-01'; 
    
    WITH cte 
         AS (SELECT id = Row_number() OVER(ORDER BY [date]), 
                    DATE, 
                    myid = id, 
                    invoice_id, 
                    orderdate = CONVERT(DATE, DATE), 
                    ammount 
             FROM   [Table_2] 
             WHERE  DATE >= @DateStart) 
    SELECT myid, 
           invoice_id, 
           DATE, 
           ammount, 
           runningtotal = (SELECT SUM(ammount) 
                           FROM   cte 
                           WHERE  id <= a.id) 
    FROM   cte AS a 
    ORDER  BY id 
    

    【讨论】:

    • 谢谢。问题是我在runningtotal subselect中使用了[Table_2]而不是cte。
    • 我会提到DATE是一个保留字,如果必须使用它应该用方括号括起来以区分列和关键字(上面的CONVERT表达式,例如,我觉得很有趣)。
    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 2021-12-14
    • 2017-03-25
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多