如何编写查询求和?

时间:2012-09-10 20:58:41

标签: sql

我有两列的表:日期和点数。我想创建一个查询,它将返回所有日期的点数总和,包括今天。这是为了生成一个积分图表,直到今天。

编辑:我认为在ews编辑之前我的问题更清楚了:)

使用类似的数据

2012-01-01    1
2012-01-02    1
2012-01-02    2     same day as above (we can have many records for one day, you can think of it as a result of one game on that day)
2012-01-03   -1

我希望看到结果:

2012-01-01    1
2012-01-02    4  (1+1+2)
2012-01-03    3  (1+1+2-1)

我正在使用SQL Server 2008.如果您知道如何在LINQ to Entities中做到这一点,那就太棒了。

4 个答案:

答案 0 :(得分:5)

如果你需要累积,你应该试试这个:

修改

SELECT 
Date,
(SELECT SUM(Point) FROM A WHERE Date <= MainTable.Date) AS Points
FROM A MainTable
GROUP BY Date

这是一个SQL Fiddle来测试它。

答案 1 :(得分:2)

有些DBMS通过使用窗口函数有更好的方法来实现这一点,但这里的查询应该适用于大多数SQL数据库:

SELECT t1.date,
       SUM(t2.points) AS points_to_date
  FROM table_name t1
  JOIN table_name t2
    ON t2.date <= t1.date
 ORDER
    BY t1.date
;

答案 2 :(得分:0)

我知道这样做的唯一方法是每天都有一个新查询。

dateVariable = "2012-09-06"
SELECT Sum(points) From table_name WHERE Date<=dateVariable;

显然,您需要在所有日子里进行迭代才能执行此操作,每次都更改dateVariable。

答案 3 :(得分:0)

我从您希望获得一系列积分的问题中理解,以便每个日期都具有小于该日期的所有日期的总和。如果是这样,请查看this article的正在运行的总计部分。