数据表中记录如下:
a
b
c
a
d
e
f
a
g其中 a 出现过数次
现在想得到几个a之间的间隔记录数或最大间隔
如:第一个a与第二个a间隔为2
第二个a与第三个a间隔为3
最大间隔为3

解决方案 »

  1.   

    增加自增字段ID
    SELECT BH,MAX(SS) FROM (
    SELECT *,(SELECT MIN(id) FROM aa3 WHERE a.`bh`=bh AND a.`id`<id)-1-id AS ss FROM aa3 a) B
    GROUP BY BH
      

  2.   

    增加自增字段ID
     SELECT BH,MAX(SS) FROM (
     SELECT *,(SELECT MIN(id) FROM aa3 WHERE a.`bh`=bh AND a.`id`<id)-1-id AS ss FROM aa3 a) B WHERE BH='a'
     GROUP BY BH
      

  3.   

    如果没有seq、id、time等表述逻辑顺序的字段,row之间的间隔没有意义,数据库存储引擎的物理排序并不和你看到的视图顺序有关
      

  4.   

    如果没有唯一标识的字段,只能用SP+游标解决,MYSQL没有窗口函数
      

  5.   

    有ID字段
    不过不一定字段值是连续的
    比如ID字段值可能是:
    2
    3
    4
    7
    9
    ....
      

  6.   

    只要是有顺序的就行
    SELECT MAX(js) FROM (
    SELECT b.bh,b.ss,COUNT(*)-2 AS js FROM aa3 a 
    RIGHT JOIN ( 
     SELECT *,(SELECT MIN(id) FROM aa3 WHERE a.`bh`=bh AND a.`id`<id) AS ss FROM aa3 a) b
     ON a.id BETWEEN b.id AND b.ss WHERE b.bh='a'
     GROUP BY b.`bh`,b.ss) c
      

  7.   

    select max(间隔) from
    (
    select 比如ID字段,记录A
    (select count(*) from 数据表 where 比如ID字段=t.比如ID字段)-
    (select count(*) from 数据表 where 比如ID字段<=( select 比如ID字段 from 数据表 where 记录A='a' and 比如ID字段<t.比如ID字段))
    as 间隔
    from 数据表 t
    where 记录A='a'
    ) v
      

  8.   


    再请教一下数据表中记录如下:
    a1
    b
    c
    a23
    d
    e
    f
    a4
    g其中 a 出现过数次
    现在想得到几个a之间的间隔记录数或最大间隔
    如:第一个a与第二个a间隔为2
    第二个a与第三个a间隔为3
    最大间隔为3有id字段,不连续
      

  9.   

    SELECT b.bh,b.ss,COUNT(*)-2 AS js FROM aa3 a 
     RIGHT JOIN ( 
      SELECT *,(SELECT MIN(id) FROM aa3 WHERE a.`bh`=bh AND a.`id`<id) AS ss FROM aa3 a) b
      ON a.id BETWEEN b.id AND b.ss WHERE b.bh='a'
      GROUP BY b.`bh`,b.ss
    这个是几个a之间的间隔记录数