【问题标题】:SQL: Running total with group bySQL:按分组运行总计
【发布时间】:2021-10-01 19:45:09
【问题描述】:

我有一个数据集,每个交易都有两个日期列。发票日期和收费日期。我正在尝试在 sql 中对表进行累积或运行总计。

数据表如下所示
发票日期 ChargeDate 交易 ID
2021 年 1 月 1 日 2021 年 1 月 1 日 11111
2021 年 1 月 1 日 2021 年 1 月 1 日 55555
2021 年 1 月 1 日 2021 年 2 月 1 日 11111
2021 年 1 月 1 日 2021 年 2 月 1 日 22222
2021 年 1 月 1 日 2021 年 2 月 1 日 33333
2021 年 1 月 1 日 2021 年 2 月 1 日 44444
2021 年 2 月 1 日 2021 年 1 月 1 日 11111
2021 年 2 月 1 日 2021 年 1 月 1 日 22222
2021 年 2 月 1 日 2021 年 1 月 1 日 33333
2021 年 2 月 1 日 2021 年 1 月 1 日 44444
2021 年 2 月 1 日 2021 年 2 月 1 日 55555

我想要这种格式的输出
发票日期 ChargeDate 累计计数
2021 年 1 月 1 日 2021 年 1 月 1 日 2
2021 年 1 月 1 日 2021 年 2 月 1 日 5
2021 年 2 月 1 日 2021 年 1 月 1 日 3
2021 年 2 月 1 日 2021 年 2 月 1 日 4

我尝试了以下代码,但它没有给我一个运行总数。它给了我两列的总和

    select
    chargeDate,
    InvoiceDate,
    Count(Distinct TransactionID) as CountofIDs
    from mytable1
where InvoiceDate<=InvoiceDate
    group by ChargeDate, InvoiceDate

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

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


【解决方案1】:

嗯。 . .如果我遵循正确,您需要使用窗口函数进行聚合。

select invoicedate, chargedate,
       count(*) as cnt_on_dates,
       sum(count(*)) over (partition by invoicedate order by chargedate) as cumulative_count
from t
group by invoicedate, chargedate;

【讨论】:

  • 对不起,我忘了提到不支持过度功能。我相信它是 2005 年版
猜你喜欢
  • 1970-01-01
  • 2014-04-05
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多