【发布时间】:2020-04-26 15:41:35
【问题描述】:
这是对这个问题MySql Select rows with 30 minutes difference in date 的后续跟进,尽管概念相似,但所需的解决方案可能不同。
我有一个 MySql-8.0/MariaDb-10.4 表,其中包含不同访问者的站点访问列表:
我想创建一个查询,返回每次访问会话的上次访问,其中会话定义是CreatedAt 日期为 30 分钟或更长时间的位置以前的访问。
所以在我的情况下,我应该返回第 7 行(Id 列)、第 12 行和第 13 行。另请注意,会话可以超过 30 分钟,只要每次访问都在少于 30 分钟的情况下成功.
@EugenRieck 提出的简洁解决方案如下:
SELECT
late.*
FROM activities AS late
LEFT JOIN activities AS early
ON late.VisitorId=early.VisitorId
AND late.CreatedAt>early.CreatedAt
AND late.CreatedAt<=DATE_ADD(early.CreatedAt, INTERVAL +30 MINUTE)
WHERE early.Id IS NULL
-- Maybe: AND late.VisitorId='26924c19-3cd1-411e-a771-5ebd6806fb27'
-- Maybe: ORDER BY late.CreatedAt
效果很好,但它通过在每次访问会话中返回第一次访问而不是最后一次访问来工作。我试图修改为我想要的工作,但没有运气。请帮忙。
【问题讨论】: