gpt4 book ai didi

mysql - 如何知道页面访问是否按预期顺序发生?

转载 作者:行者123 更新时间:2023-11-30 21:56:42 25 4
gpt4 key购买 nike

假设我有一个表,其中包含用户 session 、他们在该 session 中访问的页面以及这些页面访问的日期时间。用户应该以正确的顺序访问页面 - 也就是说,他们不应该先浏览第 3 页才能到达第 2 页。

这里(用户 1, session 1)是一个“好” session ,因为她以正确的顺序访问了所有页面。

user_id  session_id  page_id  event_dt
1 1 1 2017-07-04 17:54:40
1 1 2 2017-07-04 17:54:43
1 1 3 2017-07-04 17:54:44

但是(用户 2, session 2)是一个“糟糕的” session ,因为她设法在第 1 页之前以某种方式登陆第 2 页

user_id  session_id  page_id  event_dt
2 2 2 2017-07-04 17:54:47
2 2 1 2017-07-04 17:54:49
2 2 3 2017-07-04 17:54:50

如何使用 SQL 查询确定(用户 1, session 1)是“好” session ,而(用户 2, session 2)是“坏”路径。

附录

我按照 Degan 的建议添加了一个新的 event_dt 列在下面的评论中。

此外,我正在寻找使用 MySQL 的查询,尽管我也希望看到使用 SQL Server(或任何其他包含窗口函数的实现)的查询。

最佳答案

您可以枚举页面两次,一次按页面顺序,一次按日期顺序。然后比较它们:

select t.*
from (select t.*,
(@rn := if(@us = concat_ws(user_id, session_id), @rn + 1,
if(@us := concat_ws(user_id, session_id), 1, 1)
)
) as rn_p
from (select t.*,
(@rn := if(@us = concat_ws(user_id, session_id), @rn + 1,
if(@us := concat_ws(user_id, session_id), 1, 1)
)
) as rn_e
from t cross join
(select @us := '', @rn := 0) params
order by user_id, session_id, event_dt
) t cross join
(select @us := '', @rn := 0) params
order by user_id, session_id, page_id
) t
where rn_e <> rn_p;

关于mysql - 如何知道页面访问是否按预期顺序发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44915234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com