如何通过mysql获取时间序列

时间:2016-07-22 08:17:34

标签: mysql

在我的表中有一个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实现它?

1 个答案:

答案 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`

SqlFiddle Demo