mysql用于选择值按顺序排列的记录

San*_*lai 7 mysql

如何在TOWN匹配的位置(两个或多个)中选择ID1值的记录

我的桌子

TOWN    ID1
town1   1
town1   2
town1   4 
town2   1
town2   5 
town2   8 
town3   1 
town3   2 
town3   3 
Run Code Online (Sandbox Code Playgroud)

要求的结果

TOWN    ID1
town1   1
town1   2
town3   1 
town3   2 
town3   3 
Run Code Online (Sandbox Code Playgroud)

sql小提琴

http://sqlfiddle.com/#!2/b409f/26

Dan*_*Dan 6

您可以使用EXISTS子句检查序列中的下一个值.此代码仅匹配长度> = 2的"序列",这似乎是您想要的示例.

SELECT * 
  FROM Table1 a 
 WHERE EXISTS (SELECT * 
                 FROM Table1 b 
                WHERE b.TOWN=a.TOWN 
                  AND b.ID1 IN (a.ID1 - 1, a.ID1 + 1))
 ORDER BY TOWN, ID1
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 3

如果您的问题是“给我所有具有id1城镇相邻字段的行”,那么只需:

select distinct t1.*
from Table1 t1
join Table1 t2 on t2.town = t1.town and ABS(t1.ID1 - t2.ID1) = 1
order by 1, 2
Run Code Online (Sandbox Code Playgroud)

请参阅SQLFiddle了解这一点。


要也匹配另一列,请将条件添加到连接中,例如:

select distinct t1.*
from Table1 t1
join Table1 t2
  on t2.town = t1.town
  and t2.state = t1.state
  and ABS(t1.ID1 - t2.ID1) = 1
order by 1, 2
Run Code Online (Sandbox Code Playgroud)