2016-07-22 38 views
0

獲得時間順序在我的桌子上有一個ID列,日期列與這樣的狀態欄:如何通過MySQL的

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

你必須使用變量來做到這一點:

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

+0

它的工作原理!非常感謝你! – natsuapo

+0

我很抱歉再次打擾你,我只是想知道如果我想要將開始日期和結束日期合併在一起,而不僅僅是結束日期,該怎麼辦? – natsuapo

+0

@natsuapo你的預期結果是什麼? – Blank