SQL检查相邻的行是否有序列

时间:2010-09-21 04:20:10

标签: sql mysql

我有一个带有id列的表(唯一的,主要的),一个名称(不是唯一的 - 事实上,很可能是重复的),还有一个标志列,其值为0,1或2.假设我重新排序该表使用命令

SELECT id,name,flag ORDER BY name,id

我想使用SQL生成一个名称列表,其中当向下读取重新排序中的行时,有两个相邻的行具有相同的名称和值为0和1的标志(按此顺序)。另外,在该列表中,我想要发生这两行的ID。如果它不止一次发生,那么应该有多行。

因此,例如,在下面的

id name flag
4  Bob  0
5  Bob  2
6  Bob  1
1  Cathy  0
7  Cathy  1
3  David  0
2  Elvis  2
8  Elvis  0
9  Elvis  1

我想选择

name id1 id2
Cathy 1 7
Elvis 8 9

我该怎么做?

我正在使用MySQL。

编辑:请注意,这些相邻行的ID可能不是连续的;如果我们按名称订购,它们只是连续的。例如,见凯茜。

谢谢!

2 个答案:

答案 0 :(得分:1)

select t1.name, t1.id as id1,t2.id as id2 
from tablename t1, tablename  t2 
where t1.flag = 0 and t2.id = t1.id+1 and t2.flag = 1 and t1.name = t2.name

答案 1 :(得分:1)

尝试:

select t1.name, t1.id as id1,t2.id as id2 
from tablename t1
join tablename t2 
on t2.name = t1.name and t2.flag = t1.flag + 1 and t2.id = 
    (select min(t3.id) from tablename t3
     where t1.name = t3.name and t1.id < t3.id)

编辑:修改了加入到t2以包括查询子查询