Это ответ на этот вопрос MySql Выберите строки с 30-минутной разницей в дате , хотя и схожи по концепции, необходимое решение может быть другим.
У меня есть MySql -8.0 / MariaDb-10.4 таблица, которая содержит список посещений различных посетителей:
![enter image description here](https://i.stack.imgur.com/PXkCo.png)
Я хочу создать запрос, который возвращает последнее посещение каждого сеанса посещения , где определение сеанса - это когда 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
Отлично работает, но работает, возвращая первое посещение в каждом сеансе посещения, а не последнее посещение . Я пытался изменить, чтобы работать, как я хотел, но безуспешно. Пожалуйста, помогите.