首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取mysql中连续重复记录的最大数量

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

Stack Overflow用户
提问于 2013-09-30 21:41:19
回答 1查看 244关注 0票数 3

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

  • 威士忌
  • 伏特加
  • 啤酒

每当程序员喝完饮料,就会向表中添加一个新行,包括:

  • 喝完酒的时间
  • 组ID
  • 程序员ID
  • 饮用的饮料类型

程序经理希望每六个小时发送一封电子邮件,列出在过去6小时内连续喝了5杯或更多啤酒的程序员名单,而不喝一杯伏特加/威士忌,也不喝一杯水。每个程序员在没有切换到另一种饮料的情况下喝过的啤酒总数至少需要包括在报告中。

如果在达到5瓶啤酒之前至少喝了一杯啤酒,那么这个程序员就不会出现在列表上了。

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

没有任何程序员可以消费的饮料类型或顺序的要求。

MySQL数据库有一个表“饮料”,其中包括:

  • drinks_id INT(11) PK神经网络AI
  • group_id INT(11) NN
  • programmer_id INT(11) NN
  • type_of_drink VARCHAR(25) NN
  • time_finished日期时间神经网络

(饮料的类型应该在另一张桌子上,使用的是drink_type_id,但我在这里要简单一些)

我正在寻找的核心是在指定时间内,每个组/程序员组合的连续行数的最大计数值( type_of_drink = 'beer‘)。我已经用尽了我的sql技巧,试图用type_of_drink <> 'beer‘计数两个记录之间的连续记录数,并返回每个组/程序员组合的最大值。我似乎搞错了,这可能不是从一开始就看待这个问题的方法。

提前谢谢。如果需要的话,我很乐意提供任何额外的信息或要求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-30 22:14:48

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19104356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档