代码之家  ›  专栏  ›  技术社区  ›  unsorted

SQL检查相邻行的序列

  •  1
  • unsorted  · 技术社区  · 14 年前

    我有一个id列(unique,primary)、name(not unique——事实上,很可能是repeated)的表,还有一个flag列,其值为0、1或2。假设我使用命令重新排序表

    选择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 回复  |  直到 14 年前
        1
  •  1
  •   Nik    14 年前

    尝试

    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
    
        2
  •  1
  •   user359040 user359040    14 年前

    尝试:

    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)