Диапазон GROUP BY ID? - PullRequest
       11

Диапазон GROUP BY ID?

0 голосов
/ 11 июля 2009

Учитывая набор данных, как это;

+-----+---------------------+--------+
| 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 записи. В реальных данных я буду делать это когда-либо 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;

Это, очевидно, не очень хороший способ решить большую проблему. Я мог бы просто написать цикл, но я бы хотел уменьшить количество запросов.

Ответы [ 3 ]

4 голосов
/ 11 июля 2009

Как насчет ...

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

(я предполагаю, что идентификатор является относительным)

Это та же идея в вашем запросе, только с использованием идентификатора для группировки вместо дня.

4 голосов
/ 11 июля 2009

Вы можете использовать целочисленное деление на ROWNUMBER, чтобы сделать это.

Если вы уверены, что ваш столбец id является последовательным, просто используйте: GROUP BY FLOOR (id / 5)

0 голосов
/ 20 марта 2010

группа по году (your_date), неделя (your_date)

, сгруппированные по 7-дневным интервалам, которые могут работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...