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
& lastPosterID
de 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 BY
clá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
deviceID
es de lapets
tabla, 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
NULL
para amboslastComDate
ylastPosterId
para todos los registros.Dado que sus tablas se ven así:
Esta consulta debería hacer el truco:
fuente