Вопрос

Я отслеживаю просмотры страниц в модулях, используя следующую таблицу:

id | page_id | user_id | session_id | created

Каждая страница уникальна для определенного модуля; например, страница 14 существует только в модуле 2.

Я пытаюсь написать запрос, который сообщает мне, когда начался сеанс просмотра (GROUP BY session_id) для определенного модуля, но у меня возникают проблемы с моим заказом. По сути, для этого сгруппированного сеанса я хочу вернуть самое раннее «созданное» (время начала сеанса просмотра) и самое последнее page_id (как далеко они попали в модуль).

Как лучше всего это сделать?

Это было полезно?

Решение

Я думаю, вам нужно будет использовать подзапросы в select:

SELECT a.session_id, MIN(a.created) as start_time, 
b.page_id AS last_page, b.end_time
FROM table a 
INNER JOIN 
   (SELECT b.session_id, MAX(b.created) as end_time, MAX(b.page_id) 
   FROM table b GROUP BY b.session_id) 
ON a.session_id = b.session_id GROUP BY a.session_id

Другие советы

SELECT  MIN(created), MAX(page_id)
FROM    modules
GROUP BY
        session_id
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top