数据库
首页 > 数据库> > 获取mysql中连续重复记录的最大数量

获取mysql中连续重复记录的最大数量

作者:互联网

假设有25个程序员组,每组中有5-100个程序员.每组程序员都有编写此问题所指查询的任务.为了响应此任务,每个小组中的许多程序员开始大量饮酒.每个组都有一个库存栏,其中包括:

>威士忌
>伏特加酒
>啤酒
>水

程序员每次喝完酒,都会在表中添加新行,其中包括:

>饮料冲完的时间
>组ID
>程序员编号
>消耗的饮料类型

计划经理希望每六个小时通过电子邮件发送一次列表,列出在过去6个小时内连续喝了5个或更多啤酒,却不喝伏特加/威士忌或一杯水的程序员列表.报告中必须包括每个程序员至少一次不切换到另一种饮料而消耗的啤酒总数.

如果在达到5杯啤酒之前至少消费了一杯啤酒以外的其他饮料,那么该程序员将不会进入列表.

程序员在6小时内可以饮用的饮料数量没有上限或下限.

没有任何程序员可以饮用的饮料类型或顺序的要求.

MySQL数据库有一个表“ drinks”,其中:

> Drinks_id INT(11)PK NN AI
> group_id INT(11)NN
>程序员ID INT(11)NN
> type_of_drink VARCHAR(25)NN
> time_finished DATETIME NN

(饮料的类型可能应该在另一个表中,并且使用了drink_type_id,但是为了简单起见,我在这里)

我要寻找的核心是指定时间段内每个组/程序员组合的type_of_drink =’beer’的连续行数的最大计数值.我已经用尽了我的SQL技巧,试图计算type_of_drink<>在两个记录之间存在的连续记录数. “啤酒”并返回每个组/程序员组合的最大值.我似乎无法正确解决问题,而这也许并不是解决该问题的方法.

提前致谢.如果需要,我将很乐意提供任何其他信息或要求.

解决方法:

SELECT DISTINCT programmer_id 
FROM (
    SELECT
    programmer_id,
    @beercounter := IF(@prev_programmer != programmer_id OR type_of_drink != 'beer', 1, @beercounter + 1) AS how_many_beer_in_a_row,
    @prev_programmer := programmer_id
    FROM
    your_table y
    , (SELECT @beercounter:=1, @prev_programmer:=NULL) vars
    WHERE time_finished >= NOW() - INTERVAL 6 HOUR
    ORDER BY programmer_id, time_finished
) sq
WHERE how_many_beer_in_a_row >= 5

标签:gaps-and-islands,sql,mysql
来源: https://codeday.me/bug/20191122/2061796.html