如何在MYSQL中获得两个连续的行

时间:2017-07-13 10:00:55

标签: mysql sql database

我不太确定我是否把最好的头衔,但我正在寻找的是:

我有下表:

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

2 个答案:

答案 0 :(得分: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)
                     );

答案 1 :(得分:0)

select action_time, action_data
FROM table
WHERE action_data in ('BB', 'R')
Order by action_time, action_data asc

这将只返回BBR数据行按时间排序(将它们放在一起然后按字母顺序排序(BB在R之前)