2015-06-22 3 views
1

Я пытаюсь создать временный столбец, который дает каждому набору из пяти результатов число, чтобы я мог группироваться. У меня много проблем, пытаясь выяснить, как это сделать это.Временное число строк для группы в MYSQL

Я не хочу принимать какие-либо критерии во внимание, я хочу, чтобы SQL считать первые пять результатов он видит, как GroupNumber 1 и следующие пять результатов как GroupNumber2 и так далее ..

Вот некоторые выборка данных -

Fruits Ordered Date 
Orange 4  2015-05-01 00:01:01 
Orange 2  2015-05-01 00:01:05 
Orange 20  2015-05-01 15:15:00 
Apple 30  2015-05-02 16:20:01 
Apple 40  2015-05-02 17:01:27 
Apple 24  2015-05-02 21:01:33 
Apple 19  2015-05-02 18:01:01 
Apple 22  2015-05-02 19:00:05 

Теперь я знаю, что я мог бы группу эти данные путем литья столбец DATETIME на столбец DATE, но это не то, что я конкретно нужно, я не хочу, чтобы принести даты в него, если возможное.

Нужный результат до GROUP BY будет, как это - -

Fruits Ordered Date    GroupNumber 
Orange 4  2015-05-01 00:01:01 1 
Orange 2  2015-05-01 00:01:05 1 
Orange 20  2015-05-01 15:15:00 1 
Apple 30  2015-05-02 16:20:01 1 
Apple 40  2015-05-02 17:01:27 1 
Apple 24  2015-05-02 21:01:33 2 
Apple 19  2015-05-02 18:01:01 2 
Apple 22  2015-05-02 19:00:02 2 

Любой совет высоко ценится!

+0

Результат находится перед группе, пардон – SK2017

+0

Согласно вашим критериям '{Apple, 30}' и '{Яблоко, 40}' должны быть в GroupNumber 1 , – Eborbob

+0

Да, спасибо, что указали это, опечатка! – SK2017

ответ

0

Вы можете сделать это с помощью переменных:

select s.*, 
     floor(((@rn := @rn + 1) - 1)/5) as group_number 
from sample s cross join 
    (select @rn := 0) params 
order by date; 
+0

Ух ты ... работал! Спасибо. – SK2017

+0

Не знаю, можете ли вы посоветовать это, хотя запрос работает с удовольствием, я получаю 0-19 в строках, чтобы я мог группировать их, но если я применяю сумму в запросе, это, кажется, производит больше номера строк - 0-24, если быть точным, знаете ли вы, почему это вообще произойдет? – SK2017

+0

@Dan. , , Возможно, вы должны задать другой вопрос. SQL Fiddle - отличный способ показать это поведение. –

0

Дайте rownumber к каждой строке по порядку по дате. Затем разделите рябь на 5 и используйте функцию ceiling.

Запрос

select t.Fruits,t.Ordered,t.`Date`, 
ceiling((t.rn)/5) as Group_Number 
from 
(
    select f.*, 
    @rownum := @rownum + 1 AS rn 
    from fruits f, 
    (select @rownum := 0) r 
    order by f.`Date` 
)t; 

Fiddle demo here

Смежные вопросы