MySQL consulta de dados ordenação duas maneiras
-
08-07-2019 - |
Pergunta
Estou rastreamento de páginas vistas dentro dos módulos usando a tabela a seguir:
id | page_id | user_id | session_id | created
Cada página é exclusivo para um determinado módulo; assim página 14 só existe no módulo 2, por exemplo.
Eu estou tentando escrever uma consulta que me diz quando uma sessão de visualização começou (GROUP BY session_id) para um módulo particular, mas eu estou tendo problemas com minha ordenação. Basicamente, para essa sessão agrupados, eu quero voltar o mais cedo 'criado' (a hora de início da sessão de visualização) e as últimas page_id (o quão longe eles tem dentro do módulo).
Qual é a melhor maneira de conseguir isso?
Solução
Eu acho que você vai precisar de utilizar sub-consultas no 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
Outras dicas
SELECT MIN(created), MAX(page_id)
FROM modules
GROUP BY
session_id
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow