在 MySQL 中给定特定条件选择“下一个”行
Posted
技术标签:
【中文标题】在 MySQL 中给定特定条件选择“下一个”行【英文标题】:Selecting the 'next' row given specific criteria in 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 和顺序没有增加,一些数据已被删除然后重新添加。
如何根据这个新数据集再次编写相同的查询?
【问题讨论】:
【参考方案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)
上的复合索引应该有助于提高性能。
【讨论】:
谢谢@GordanLinoff - 我真的很喜欢这个(en.wikipedia.org/wiki/Rubber_duck_debugging)。马上就看到了答案。很高兴我最初的做法得到了支持! @jakenoble 。 . .我以前没听过这个词。太好了,我经常经历。 任何想法@GordonLinoff? ***.com/questions/18099683/… - 我的方法似乎失败了。以上是关于在 MySQL 中给定特定条件选择“下一个”行的主要内容,如果未能解决你的问题,请参考以下文章