mysql统计某字段值相同情况时,对应另外一个字段值变化次数(已补充时间条件排序) 5C

图片说明

类似如图 aa和bb字段在同一张表中
统计aa字段相同时 ,bb值如果从1变为其他值,则统计值加1,从其他值变为
1则统计值加1

如图所示统计结果该是下面的
111 为 2
222 为 3
333 为 1

有一个starttime字段可以用来表示先后
图片说明

aa里面出现的值我是未知的 ,求解select 语句 该怎么写

5个回答

就你这个问题,无解,除非你增加一个表示顺序的字段。因为记录在数据库里是无序的,
333 1
333 0
333 0
也可以是
333 0
333 1
333 0
相同的数据有多个结果这显然是荒谬的

qian_yan_ai
qian_yan_ai 大佬求解啊 我没说清楚,是有一个时间字段可以用来排序的
11 个月之前 回复
qian_yan_ai
qian_yan_ai 回复: 假如有一个starttime的字段表示先后呢?
11 个月之前 回复
qian_yan_ai
qian_yan_ai 里面有一个时间的字段,是按照时间先后的
11 个月之前 回复

就这两个字段确实没办法使查询准确,除非允许这种查询相同数据出现不一样结果的情况出现。

qian_yan_ai
qian_yan_ai 大佬 我表里实际还有时间字段 麻烦帮我看下
11 个月之前 回复
qian_yan_ai
qian_yan_ai 还有一个字段 starttime 时间
11 个月之前 回复

先根据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
;
大佬教我做的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!