我有一个带有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可能不是连续的;如果我们按名称订购,它们只是连续的。例如,见凯茜。
谢谢!
答案 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以包括查询子查询