【问题标题】:Selecting the 'next' row given specific criteria in MySQL在 MySQL 中给定特定条件选择“下一个”行
【发布时间】:2013-07-25 23:24:57
【问题描述】:

我有这组数据,需要根据“下一个”逻辑行中的内容进行查询。

 id |  area |  order
 1     front   1
 2     back    2
 3     left    3
 4     middle  4
 5     right   5

我有一个这样的查询来计算前面区域后面跟着后面区域的实例数

SELECT 
    (SELECT COUNT(id) 
     FROM table AS t2 
     WHERE t2.area = 'back' AND t2.order = (t1.order +1)) AS c,  
FROM table AS t1
WHERE t1.area = 'front'

但是,数据集现在发生了变化,可能看起来像这样

 id |  area |  order
 1     front   1
 2     back    3
 4     left    4
 6     middle  7
 9     right   9

现在 ID 和顺序没有增加,一些数据已被删除然后重新添加。

如何根据这个新数据集再次编写相同的查询?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您的原始查询相当聪明。这是一种略有不同的方法。它获取子查询中的下一个区域(使用您的示例中的相关子查询)。然后计算条件为真的行数:

    select sum(case when area = 'Front' and nextarea = 'Back' then 1 else 0 end)
    from (SELECT t1.*,
                 (SELECT t2.area 
                  FROM table t2 
                  where t2.order > t1.order
                  order by t2.order
                  limit 1
                 ) as nextarea 
    FROM table t1;
    

    这个查询比你的更贵。您可以在 order 列上使用一个很好的相等条件。在这里,需要对limit 进行排序以获得下一个值。 (order, area) 上的复合索引应该有助于提高性能。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多