2009-07-11 4 views
0

このようなデータセットがあれば、ID範囲のGROUP BY?

+-----+---------------------+--------+ 
| id | date    | result | 
+-----+---------------------+--------+ 
| 121 | 2009-07-11 13:23:24 |  -1 | 
| 122 | 2009-07-11 13:23:24 |  -1 | 
| 123 | 2009-07-11 13:23:24 |  -1 | 
| 124 | 2009-07-11 13:23:24 |  -1 | 
| 125 | 2009-07-11 13:23:24 |  -1 | 
| 126 | 2009-07-11 13:23:24 |  -1 | 
| 127 | 2009-07-11 13:23:24 |  -1 | 
| 128 | 2009-07-11 13:23:24 |  -1 | 
| 129 | 2009-07-11 13:23:24 |  -1 | 
| 130 | 2009-07-11 13:23:24 |  -1 | 
| 131 | 2009-07-11 13:23:24 |  -1 | 
| 132 | 2009-07-11 13:23:24 |  -1 | 
| 133 | 2009-07-11 13:23:24 |  -1 | 
| 134 | 2009-07-11 13:23:24 |  -1 | 
| 135 | 2009-07-11 13:23:24 |  -1 | 
| 136 | 2009-07-11 13:23:24 |  -1 | 
| 137 | 2009-07-11 13:23:24 |  -1 | 
| 138 | 2009-07-11 13:23:24 |  1 | 
| 139 | 2009-07-11 13:23:24 |  0 | 
| 140 | 2009-07-11 13:23:24 |  -1 | 
+-----+---------------------+--------+ 

一度に5つのレコードで結果をグループ化する方法を教えてください。上記の結果はライブデータの一部です。テーブルには100,000を超える結果行があり、その結果は大きくなっています。基本的には、時間の経過とともに変化を測定したいので、Xレコードごとに結果のSUMを取りたいと思っています。実際のデータでは、私はこれまでに100または1000を実行していますが、おそらく5以上のデータについてはそうです。

私はこれを日付でソートすることができます。

SELECT 
    DATE_FORMAT(date, '%h%i') ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

数字と似たようなことをする方法がわかりません。順序は日付でソートされますが、xの結果ごとにデータを分割したいと考えています。空白行がないと仮定することは安全です。あなたのような複数の選択を行うことができ、データを持つ上に、それをやって

SELECT SUM(result) FROM table LIMIT 0,5; 
SELECT SUM(result) FROM table LIMIT 5,5; 
SELECT SUM(result) FROM table LIMIT 10,5; 

これは明らかに大きな問題にスケールアップするための非常に良い方法ではありません。私はループを書くことができますが、クエリの数を減らしたいと思います。

答えて

4

相関)

これはクエリで同じ考えであり、IDを使用して1日ではなくグループ化します。あなたのための7日間隔でグループを働くかもしれないだろう年によって

+0

完全に感謝します。興味深いことにそれをやって は私の最初のもののための唯一の999を与えた...しかし、私はそれと一緒に暮らすことができます。 >床(ID/1000)YM、 - - > COUNT(結果)「総Gamesの、 - 'スコア' として> SUM(結果) - MySQLの> をSELECT> nn_log FROM - YM BY> GROUP ; + ------ + ------------- + ------- + | ym |トータルゲーム|スコア| + ------ + ------------- + ------- + | 0 | 999 | -879 | | 1 | 1000 | -889 | | 2 | 1000 | -920 | | 3 | 1000 | -903 | .... –

+0

書式設定に失敗しました –

4

あなたはこれを行うにはROWNUMBERに整数の除算を使用することができます。

あなたのid列がconsecuitiveであることが確実な場合にだけ使用します。

SELECT 
    floor(id/5) ym, 
    COUNT(result) 'Total Games', 
    SUM(result) as 'Score' 
FROM nn_log 
GROUP BY ym; 

...について(私はidがあると仮定していますどのようFLOOR BY GROUP(ID/5)

0

グループ(your_date)、週(your_date)