在MYSQL中暂时将行数分组

时间:2015-06-22 12:35:05

标签: 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

非常感谢任何建议!

2 个答案:

答案 0 :(得分:0)

您可以使用变量执行此操作:

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

答案 1 :(得分:0)

按日期顺序为每一行提供rownumber。然后将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