我不太确定我是否把最好的头衔,但我正在寻找的是:
我有下表:
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
我正在寻找一个返回BB
和R
连续行的行的查询,所以我想要的输出如下:
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
答案 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
这将只返回BB
和R
数据行按时间排序(将它们放在一起然后按字母顺序排序(BB在R之前)