2012-09-10 70 views
0

我有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中做到這一點,那就太棒了。

+0

換句話說所有的點只是一個總和,或者每天積分的總和? – dbf

+0

哪個DBMS? (PostgreSQL?MySQL?SQL-Server?Oracle?) – ruakh

+0

現在的問題已經改變。你需要什麼?一個簡單的總和或「運行總和」,所以一個累計? –

回答

5

如果你需要累積性,你應該試試這個:

編輯:

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

這裏是一個SQL Fiddle對其進行測試。

+0

我編輯了我的問題。每天可能有很多記錄。我按照日期添加了分組到您的查詢,現在是完美的。也許你知道是否有可能在LINQ to Entities中做到這一點? –

+0

我知道這一定很簡單,但是我自己找不到解決方法。笨。 –

0

我知道這樣做的唯一方法是每天都有一個新的查詢。

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

顯然你需要遍歷所有日子來做到這一點,每次更改dateVariable。

+0

這是做到這一點的程序性方法。這是我想到的一個解決方案,但它很糟糕。我甚至不知道我會怎樣稱呼它,並在我的數據庫中返回所有日子的金額。 –

0

我從你想要的點數運行總和的問題中瞭解到,所以每個日期的所有日期的點數總和小於該日期。如果是這樣,請看看this article的運行總計部分。

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 
; 
+0

這是無效的SQL - http://www.sqlfiddle.com/#!3/26ac8/3。我加了一組,但是然後它返回錯誤的結果。但它仍然幫助了我一點,所以我upvote。 –

+0

@Peri:哦,哇,哎呀,對不起!我應該首先進行測試,否則至少會發佈一個我沒有測試過的免責聲明。 – ruakh