2013-12-23 87 views
0

背景信息:我在一個小私人pingdom.com克隆工作。按類型分組mysql結果 - 但只按一定順序

我有一個表格,包含狀態檢查,如果網站是否可用以及課程的檢查日期。其中一些有狀態「好」,有些「不好」。現在我想按狀態對行進行分組,但只有在同一個「時間範圍」中的行。

例子:

id status timestamp 
1 ok  1234 
2 ok  1235 
3 not ok 1236 
4 ok  1237 

查詢應做三組,ID用1-2,3和4。我想這樣做顯示,該測試網站是2月底小時上網,1倍小時的離線和然後再次在線1小時。當然,我可以過濾結果,但我認爲這對大數據集來說效率很低。

我絕對不知道從哪裏開始,因爲你不能只按狀態分組。搜索詞的短暫幫助就足夠了,英語不是我的第一語言。

回答

1

嘗試此查詢:

SELECT min(timestamp) from_timestamp, 
     max(timestamp) to_timestamp, 
     max(timestamp) - min(timestamp) + 1 how_long, 
     min(id) from_id, 
     max(id) to_id, 
     status 
FROM (
    SELECT t.id, 
      t.timestamp, 
      if(@last_status = status, @group, @group:[email protected]+1) group_number, 
      @last_status := status as status 
    FROM table1 t 
    CROSS JOIN (
     SELECT @last_status := null, @group:=0 
    ) as init_vars 
    ORDER BY t.timestamp 
) q 
GROUP BY group_number 
ORDER BY from_timestamp 

演示: - >http://www.sqlfiddle.com/#!2/2aa1e/10

+0

真是太好了!我想我可能需要一些時間來實現它,但演示工程,所以謝謝你! – Tim