如何写查询求和?
我有2列的表:日期和点。我想创建一个查询,返回包括今天在内的所有日子的点数。这是为了生成一个直到今天的积分表。如何写查询求和?
编辑:我觉得我的问题比较清楚之前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)
我m使用SQL Server 2008.如果你知道如何在LINQ to Entities中做到这一点,那就太棒了。
如果你需要累积性,你应该试试这个:
编辑:
SELECT
Date,
(SELECT SUM(Point) FROM A WHERE Date <= MainTable.Date) AS Points
FROM A MainTable
GROUP BY Date
这里是一个SQL Fiddle对其进行测试。
我编辑了我的问题。每天可能有很多记录。我按照日期添加了分组到您的查询,现在是完美的。也许你知道是否有可能在LINQ to Entities中做到这一点? –
我知道这一定很简单,但是我自己找不到解决方法。笨。 –
我知道这样做的唯一方法是每天都有一个新的查询。
dateVariable = "2012-09-06"
SELECT Sum(points) From table_name WHERE Date<=dateVariable;
显然你需要遍历所有日子来做到这一点,每次更改dateVariable。
这是做到这一点的程序性方法。这是我想到的一个解决方案,但它很糟糕。我甚至不知道我会怎样称呼它,并在我的数据库中返回所有日子的金额。 –
部分的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
;
这是无效的SQL - http://www.sqlfiddle.com/#!3/26ac8/3。我加了一组,但是然后它返回错误的结果。但它仍然帮助了我一点,所以我upvote。 –
@Peri:哦,哇,哎呀,对不起!我应该首先进行测试,否则至少会发布一个我没有测试过的免责声明。 – ruakh
换句话说所有的点只是一个总和,或者每天积分的总和? – dbf
哪个DBMS? (PostgreSQL?MySQL?SQL-Server?Oracle?) – ruakh
现在的问题已经改变。你需要什么?一个简单的总和或“运行总和”,所以一个累计? –