Estoy tratando de SELECCIONAR 2 columnas de la subconsulta en la siguiente consulta, pero no puedo hacerlo. Intenté crear una tabla de alias, pero aún no pude conseguirlos.
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);
Básicamente, estoy tratando de obtener el lastComDate& lastPosterIDde la misma fila, la fila que es la última en comentarios para la mascota específica. Sugiera cómo puedo obtenerlos de manera eficiente.
La consulta anterior funciona, pero parece exagerada ya que la misma fila se obtiene dos veces. Además, la ORDER BYcláusula es significativamente más lenta que la función agregada, como encontré al realizar una consulta de perfil. Por lo tanto, se agradecería una solución que evite la clasificación.
mysql
performance
select
subquery
BufferStack
fuente
fuente

deviceIDes de lapetstabla, lo que significa que simplemente no me consiguen las mascotas que envía el propio 'ABC'.Respuestas:
También puede llevar su subconsulta a una tabla temporal si el rendimiento se ve afectado en algún momento.
fuente
NULLpara amboslastComDateylastPosterIdpara todos los registros.Dado que sus tablas se ven así:
Esta consulta debería hacer el truco:
fuente