在我的表中有一个id列,一个日期列和一个状态列,如下所示:
ID DATE STATUS
1 0106 A
1 0107 A
1 0112 A
1 0130 B
1 0201 A
2 0102 C
2 0107 C
我想得到每个ID的时间序列。这意味着如果在相邻时间内一个id处于相同状态,则前一个将被省略。查询结果如下:
ID DATE STATUS
1 0112 A
1 0130 B
1 0201 A
2 0107 C
我如何通过MySQL实现它?
答案 0 :(得分:1)
您必须使用变量来执行此操作:
select `id`, `date`, `status`
from (
select *, @rowno:=if(@grp = `STATUS`, @rowno + 1 , 1) as rowno, @grp := `STATUS`
from yourtable
cross join (select @grp := null, @rowno := 0) t
order by `id`, `date` desc
) t1
where rowno = 1
order by `id`, `date`