类似如图 aa和bb字段在同一张表中
统计aa字段相同时 ,bb值如果从1变为其他值,则统计值加1,从其他值变为
1则统计值加1
如图所示统计结果该是下面的
111 为 2
222 为 3
333 为 1
aa里面出现的值我是未知的 ,求解select 语句 该怎么写
就你这个问题,无解,除非你增加一个表示顺序的字段。因为记录在数据库里是无序的,
333 1
333 0
333 0
也可以是
333 0
333 1
333 0
相同的数据有多个结果这显然是荒谬的
就这两个字段确实没办法使查询准确,除非允许这种查询相同数据出现不一样结果的情况出现。
先根据aa bb group by,order by starttime,得到你的图1,应该好解决了吧。
得到图1后
先判断aa是否变为其它值,不变的话,判断是不是满足变化条件,再变更计数;
如果变化的初始化,再读一下条aa是不是变化,如果不变再判断变更条件,再变更计数;
aa字段的值和统计结果可以用字典存储
select
case when @b<>aa then @a:=-1 end,
aa,
@a,
case when @a<>1 and bb=1 and @a<>-1 then 1
when @a=1 and bb<>1 then 1 end as if_valid,
@a:=bb,
@b:=aa
from (select @a:=-1) a,
(select @b:=-1)c,
(select * from xx order by aa,starttime asc) b
;
select gy,count(if_valid) from (
select
case when @b<>aa then @a:=-1 end,
aa,
@a,
case when @a<>1 and bb=1 and @a<>-1 then 1
when @a=1 and bb<>1 then 1 end as if_valid,
@a:=bb,
@b:=aa as gy
from (select @a:=-1) a,
(select @b:=-1)c,
(select * from xx order by aa,starttime asc) b ) yy group by gy
;
大佬教我做的