Mysql sql查询形式中的循环
我不知道从哪里开始,所以我将只发布一个我需要的示例:Mysql sql查询形式中的循环,mysql,loops,Mysql,Loops,我不知道从哪里开始,所以我将只发布一个我需要的示例: A B 5 0 10 0 15 0 20 0 25* 1* 30 0 35 1 40 1 45* 0 50 0 55 0 60 0 65 0 70 1 75 1 80 0 85 0 我需要一个查询,它将在B列中查找1(在25 1中找到第一行),“入口点”,从这一点开始,向下查找第一列a,即在起点中比a多20行-“出口点”(找到第45 0行),返回“入口点”和“出口点”的行索引,在本例中为25 1行和45
A B
5 0
10 0
15 0
20 0
25* 1*
30 0
35 1
40 1
45* 0
50 0
55 0
60 0
65 0
70 1
75 1
80 0
85 0
我需要一个查询,它将在B列中查找1(在25 1中找到第一行),“入口点”,从这一点开始,向下查找第一列a,即在起点中比a多20行-“出口点”(找到第45 0行),返回“入口点”和“出口点”的行索引,在本例中为25 1行和45 0行
另外,棘手的部分可能是,我不想要第351行或第401行,它在B列中也包含1行,但我不想要在入口点和出口点之间的行,因此下一个适用的行将是第701行作为入口点(也将是第751行)
这是我可以在java循环中毫无问题地完成的事情,但是我得到的性能比我想要的要低,所以有人建议在这种操作中使用db应该更快。有可能进行这样的数据库查询吗?如果我正确地理解您需要第一个有效的入口点和第一个有效的出口点,类似这样的东西应该可以完成这项工作
SELECT
(
SELECT
MIN(A)
FROM
table
WHERE
B = 1
) entry,
A exit,
FROM
table
WHERE
A + 20 >= (SELECT
MIN(A)
FROM
table
WHERE
B = 1)
AND
B = 0
LIMIT 1
谢谢,但是我不需要一个,第一个有效的入口点,但所有的,他们尊重他们的出口点,但如所解释的,不考虑入口点(其中B=1),这是在先前的入口退出之间。所以在我的例子中,我需要1个入口点是25,(30,40无效,因为它们在入口25和出口45之间),然后在70处有2个入口点(出口点在下面的某个地方)等等。如果表包含1mil行,我需要所有这样的入口-出口点,而不仅仅是第一个。