假设有25组程序员,每组有5-100名程序员。每一组程序员负责编写这个问题所指的查询。为了响应这一任务,每组中的许多程序员开始大量饮酒。每一组都有一个库存栏,其中包括:
每当程序员喝完饮料,就会向表中添加一个新行,包括:
程序经理希望每六个小时发送一封电子邮件,列出在过去6小时内连续喝了5杯或更多啤酒的程序员名单,而不喝一杯伏特加/威士忌,也不喝一杯水。每个程序员在没有切换到另一种饮料的情况下喝过的啤酒总数至少需要包括在报告中。
如果在达到5瓶啤酒之前至少喝了一杯啤酒,那么这个程序员就不会出现在列表上了。
程序员在6小时内可以饮用的饮料数量没有上限或下限。
没有任何程序员可以消费的饮料类型或顺序的要求。
MySQL数据库有一个表“饮料”,其中包括:
(饮料的类型应该在另一张桌子上,使用的是drink_type_id,但我在这里要简单一些)
我正在寻找的核心是在指定时间内,每个组/程序员组合的连续行数的最大计数值( type_of_drink = 'beer‘)。我已经用尽了我的sql技巧,试图用type_of_drink <> 'beer‘计数两个记录之间的连续记录数,并返回每个组/程序员组合的最大值。我似乎搞错了,这可能不是从一开始就看待这个问题的方法。
提前谢谢。如果需要的话,我很乐意提供任何额外的信息或要求。
发布于 2013-09-30 22:14:48
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 >= 5https://stackoverflow.com/questions/19104356
复制相似问题