2012-03-08 4 views
0

私は GROUPBYクエリは、MySQL

SELECT Name, `DatePurchased` , SUM(QuantityPurchased) 
FROM table1 
GROUP BY DatePurchased 

は、右の数学をしない、次の

Name  DatePurchased  QuantityPurchased 

A  2/3/2012    1 
A  2/4/2012    1 
A  2/5/2012    2 
B  2/2/2012    1 
B  2/3/2012    2 

I want to output the following 

Name  DatePurchased   QuantityPurchased 

A   2/3/2012    1 
A   2/4/2012    2  // as I have purchased 2 upto this date 
A   2/5/2012    4  // as I have purchased 4 upto this date 
B   2/2/2012    1 
B   2/3/2012    3 

私のクエリのような値を持つテーブルがあります。私は何が間違っているのか知っていますが、解決策を理解できません。

ありがとうございます。

+0

'SUM()'を 'COUNT()'に置き換えてみてください。これはあなたが現在どのような結果を得ているかに応じて動作するかもしれません。現在のクエリが生成する出力を投稿してください。 – Bojangles

+0

カウントも機能しません。私は出力を掲示します – Ank

答えて

1

試してみてください。

SELECT t1.Name, t1.DatePurchased, SUM(t2.QuantityPurchased) 
FROM table1 t1 
LEFT JOIN table1 t2 
ON t1.Name=t2.Name AND t1.DatePurchased >= t2.DatePurchased 
GROUP BY Name, t1.DatePurchased 

これはt1の日付は、常に、少なくともt2の日付で、中にt2 S QuantityPurchased(名前ごとに、日付を集計するように、名前の中に自分自身にtable1に参加し、 t1)。

(結合テーブルを参照するSELECT *と同じクエリを実行してください、そしてSUMGROUP BYせず。その後SUMGROUP BYが明らかになるであろう)。

1

答えを書き直すと、誤読がはじめて発生します。今私はあなたが稼いでいる合計をしたいことを理解しています。私はこれがうまくいくはずだと信じています。

Select B.Name,B.DatePurchased,SUM(B.QuantityPurchased) 
FROM Table1 AS A 
INNER JOIN Table1 AS B 
ON A.Name=B.Name AND B.DatePurchased <= A.DatePurchased 
GROUP BY B.Name,B.DatePurchased 
+0

それはOPが望むものではありません - 彼らは各日付まで累積合計が欲しいです。 –

+0

@Kibbee Ya、これは動作しません:( – Ank

0

願っています!

SELECT Name, `DatePurchased` , SUM(QuantityPurchased) 
FROM table1 
GROUP BY Name, DatePurchased 
ORDER BY Name, DatePurchased