我有一个记录用户事件的日志表。这些事件按时间戳排序。
| 身份证|事件|用户|上下文|时间创造的|
| - ------|- ------|- ------|- ------|- ------|
| 五个|登录|二百三十四|无|小行星65535|
| 八个|开放|二百三十四|五个|小行星65536|
| 十三|开放|二百三十四|九|小行星65539|
| 十七|开放|二百三十四|八个|小行星65512|
| 四十三|登录|一百二十八|无|小行星65513|
| 四十四|登录|二九三|无|小行星65515|
| 六十五|开放|二九三|五个|小行星65516|
| 六十六|开放|二百三十四|五个|小行星65519|
| 九十七|登录|五六七|无|小行星65521|
| 九十九|开放|五六七|九|小行星65528|
我需要一个查询来查找相邻的前event='open'
行-紧挨着同一用户ID的event='login'
行(以及其他可能的筛选器
伪示例:select * from log where event='open' and context=5 and timecreated > (select timecreated from log where event='login' and user = (the same as the previous query) limit 1)
.
在上表中,这将与行匹配
| 身份证|事件|用户|上下文|时间创造的|
| - ------|- ------|- ------|- ------|- ------|
| 八个|开放|二百三十四|五个|小行星65536|
| 六十五|开放|二九三|五个|小行星65516|
| 九十九|开放|五六七|九|小行星65528|
这在MySQL语句中可能吗?
2条答案
按热度按时间f8rj6qna1#
尝试使用LAG()窗口函数执行以下操作:
如果您使用的是MySQL〈8,您可以用途:
最好使用
id
进行事件顺序比较,但id
和timecreated
值不同步。在示例中,5、8和13出现在所有其他具有更高ID的行之后。这可能是创建示例时的错误。goqiplq22#