2017-07-13 37 views
0

我不太清楚,如果我把最好的冠軍,但我所尋找的是:如何獲得連續兩次排在MYSQL

我有如下表:

action_time   action_data 
2017-06-02 05:25:44  BB 
2017-06-02 05:25:44  R 
2017-06-02 05:27:02  A 
2017-06-06 08:45:34  C 
2017-06-06 08:45:38  BB 
2017-06-06 08:45:41  R 
2017-06-06 08:45:45  D 
2017-06-18 13:12:37  F 
2017-06-18 13:12:42  BB 
2017-06-18 13:12:51  R 

我是尋找返回行,其中BBR是在連續行的查詢,所以我的理想的輸出會像下面:

action_time   action_data 
2017-06-02 05:25:44  BB 
2017-06-02 05:25:44  R 
2017-06-06 08:45:38  BB 
2017-06-06 08:45:41  R 
2017-06-18 13:12:42  BB 
2017-06-18 13:12:51  R 
+1

什麼叫'連續rows'是什麼意思? – Hatik

+1

OP想根據action_data過濾結果。所以它會去BB,然後是下一個R記錄,然後是下一個BB記錄,等等。 –

+0

在表中只有這些列嗎?沒有數字鍵來幫助我們? – Kaddath

回答

1

讓我假定時間戳完全相同(如示例數據所示)。 SQL表格代表無序集合。排序由列值提供 - 如果排序列相同,則可能會得到意想不到的結果。

這裏有一個方法:

select t.* 
from (select t.*, 
      (select t2.action_data 
       from t t2 
       where t2.action_time < t.action_time 
       order by t2.action_time desc 
       limit 1 
      ) as prev_action_data, 
      (select t2.action_data 
       from t t2 
       where t2.action_time > t.action_time 
       order by t2.action_time asc 
       limit 1 
      ) as next_action_data 
     from t 
    ) t 
where ('BB', 'R') in ((prev_action_data, action_data), 
         (action_data, next_action_data) 
        ); 
0
select action_time, action_data 
FROM table 
WHERE action_data in ('BB', 'R') 
Order by action_time, action_data asc 

這將返回只有BBR數據行按時間排序它們(將它們放在一起,然後是按字母順序數據排序(BB爲R之前)

+0

你確定只會返回直接連續的行中的BB和R – sanaz

+0

@sanaz它只會返回按時間順序排列的「BB」和「R」,根據您在示例中的數據,它確實會返回您的預期結果。唯一的問題是,如果將有2個或更多'BB'它不會配對他們 – Hatik

+0

@sanaz你嘗試過嗎? where子句將把返回的行限制爲僅僅是BB和R.查看你的數據,BB和R都有相同的時間戳(對於它們的配對),所以當執行順序時,它將首先按時間順序有效地將具有相同時間戳的行配對),然後按照字母順序排列時間戳組。 – MarkD