Estou tentando selecionar 2 colunas da subconsulta na consulta a seguir, mas não é possível fazer isso. Tentei criar a tabela de alias, mas ainda não consegui obtê-los.
SELECT
DISTINCT petid,
userid,
(SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate,
(SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID
FROM
pet LEFT JOIN comments ON pet.id = comments.petid
WHERE
userid='ABC' AND
deviceID!='ABC' AND
comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH);
Basicamente, estou tentando obter o lastComDate
& lastPosterID
da mesma linha - a linha que é a mais recente nos comentários para o animal de estimação específico. Por favor, sugira como posso obtê-los de maneira eficiente.
A consulta acima funciona, mas parece exagerada, pois a mesma linha é buscada duas vezes. Além disso, a ORDER BY
cláusula é significativamente mais lenta que a função agregada - como eu encontrei ao criar uma consulta de perfil. Portanto, uma solução para evitar a classificação seria apreciada.
mysql
performance
select
subquery
BufferStack
fonte
fonte
deviceID
é dapets
tabela - o que significa que simplesmente não me dão os animais de estimação enviados pelo próprio 'ABC'.Respostas:
Você também pode extrair sua subconsulta para uma tabela temporária se o desempenho for impactado em algum lugar no futuro.
fonte
NULL
para amboslastComDate
elastPosterId
para todos os registros.Dado que suas tabelas ficam assim:
Esta consulta deve fazer o truque:
fonte