【问题标题】:SQL - Sum Data Field To DateSQL - 迄今为止的汇总数据字段
【发布时间】:2011-12-12 14:07:14
【问题描述】:

我不知道如何对数据字段求和...

我的查询当前输出类似于以下内容:

Date    Count
12/1    3
12/2    5
12/3    2

我想添加一列来汇总迄今为止的计数列:

Date    Count    To-Date
12/1    3        3
12/2    5        8
12/3    2        10

有什么想法吗?

***更新 - 我正在尝试执行此操作的表有点复杂:

ID  Date    Count for Date
X   10/11/11    10  
X   10/11/11    10  
X   14/11/11    2   
X   14/11/11    2   
X   22/11/11    21  
X   23/11/11    50
X   23/11/11    50  

使用此代码:

Sum(Count for Date) over (partition by x, date order by date rows between unbounded preceding and current row)

我最终得到:

10
20
2
4
21
50
100

【问题讨论】:

  • 如果格伦的回答没有帮助。告诉我们您使用的是什么版本的 sql。您希望它在每个月初重新启动吗?例如,如果 12/31/11 是 44,应该将 1/1/2012 添加到它,还是重新开始计数?
  • 我正在使用 Oracle SQL Developer。我不希望它重新启动,从记录 1 开始计数应该继续进行

标签: sql oracle


【解决方案1】:

[更新以反映变化,我猜测结果应该是什么,我假设你想加起来一天?如果没有,你能不能也展示一下你的预期结果?]

分析函数会这样做:

CREATE TABLE test(id int, count int);

INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(10, 10);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(14, 2);
INSERT INTO test VALUES(22, 21);
INSERT INTO test VALUES(23, 50);
INSERT INTO test VALUES(23, 50);

SELECT id, SUM(count) AS sum_for_day
  FROM test
  GROUP BY id
  ORDER BY id;

 id | sum_for_day
----+-------------
 10 |          20
 14 |           4
 22 |          21
 23 |         100
(4 rows)

SELECT id, sum_for_day
      ,sum(sum_for_day) over (order by id rows between unbounded preceding and current row) AS to_date
  FROM ( SELECT id, SUM(count) AS sum_for_day
       FROM test
           GROUP BY id
           ORDER BY id) x;

 id | sum_for_day | to_date
----+-------------+---------
 10 |          20 |      20
 14 |           4 |      24
 22 |          21 |      45
 23 |         100 |     145
(4 rows)

【讨论】:

  • 感谢 Glenn,您的代码适用于我提供的简单表格。我更新了我的问题以显示更能代表我实际拥有的内容,我试图总结的列在同一日期重复了几次。我尝试按如下方式修改您的代码:'Sum(Count for Date) over (partition by x, date order by date rows between unbounded previous and current row)'
【解决方案2】:

假设您希望每个不同 ID 的总数是不同的,您需要类似

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (partition by id order by date_column) running_total
  FROM some_table_name

如果您想忽略ID 并通过date_column 对所有行求和,只需删除解析函数中的partition by

SELECT id, 
       date_column, 
       count_for_date, 
       sum(count_for_date) over (order by date_column) running_total
  FROM some_table_name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多