Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何编写查询求和?_Sql - Fatal编程技术网

Sql 如何编写查询求和?

Sql 如何编写查询求和?,sql,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 d

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

编辑:我想我的问题在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)
我正在使用SQLServer2008。如果您知道如何在LINQ中对实体执行此操作,那就太好了。

我知道的唯一方法是每天使用一个新的查询

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

显然,要做到这一点,您需要迭代所有的日子,每次都要更改dateVariable。

如果需要累积计算,您应该尝试以下方法:

编辑:


下面是一个测试方法。

我从问题中了解到,您需要一个连续的点数总和,以便每个日期的点数总和都小于该日期。如果是这样,请查看的running total部分。

一些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
;

换句话说,就是所有点数的总和,或者每天点数的总和?哪个DBMS?PostgreSQL?MySQL?SQL Server?甲骨文?问题现在变了。你需要什么?一个简单的和还是一个运行的和,那么是一个累加的?这是一个程序性的方法。这是我想到的唯一解决办法,但它不好。我甚至不知道如何调用它并返回数据库中所有天数的总和。这是无效的SQL-。我添加了groupby,但它返回了错误的结果。但它还是帮了我一点忙,所以我提高了投票率。@Peri:噢,哇,哇,对不起!我本应该先测试的,如果测试失败,至少会发布一条我没有测试过的免责声明。我编辑了我的问题。每天可能有许多记录。我在您的查询中添加了“按日期分组”,现在就完美了。也许你们知道是否有可能在LINQ中对实体执行此操作?我知道这一定很简单,但我自己找不到解决方案。愚蠢的
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
;