gpt4 book ai didi

mysql - mysql获取最大连续重复记录数

转载 作者:可可西里 更新时间:2023-11-01 08:17:54 26 4
gpt4 key购买 nike

假设有25组程序员,每组5-100名程序员。每组程序员的任务是编写这个问题所指的查询。为了应对这个任务,每个小组的许多程序员都开始酗酒。每个组都有一个库存酒吧,包括:

  • 威士忌
  • 伏特加
  • 啤酒

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

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

项目经理希望每六小时收到一封电子邮件,其中包含在过去 6 小时内连续喝了 5 杯或更多啤酒但没有喝伏特加/威士忌或一杯水的程序员的列表。每个程序员至少有一次没有换成另一种饮料而喝过的啤酒总数需要包含在报告中。

如果在达到 5 瓶啤酒之前至少喝了一种啤酒以外的饮料,那么该程序员将不会上榜。

程序员在 6 小时内可以喝多少酒没有上限或下限。

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

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

  • drinks_id INT(11) PK NN AI
  • group_id INT(11) NN
  • programmer_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 <> 'beer' 计算两条记录之间存在的连续记录数,并返回每个组/程序员组合的最大值。我似乎无法正确理解,这可能不是首先看待这个问题的方式。

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

最佳答案

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

关于mysql - mysql获取最大连续重复记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com