Sto cercando di SELEZIONARE 2 colonne dalla sottoquery nella seguente query, ma non riesco a farlo. Ho provato a creare una tabella alias, ma non riuscivo ancora a ottenerli.
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);
Fondamentalmente, sto cercando di ottenere il lastComDate
& lastPosterID
dalla stessa riga - la riga che è l'ultima nei commenti per l'animale specifico. Si prega di suggerire come posso ottenerli in modo efficiente.
La query sopra funziona, ma sembra eccessiva poiché la stessa riga viene recuperata due volte. Inoltre, la ORDER BY
clausola è significativamente più lenta della funzione aggregata, come ho scoperto durante la profilazione della query. Pertanto, una soluzione che evita l'ordinamento sarebbe apprezzata.
deviceID
da pets
tavolo - il che significa che proprio non mi scarica gli animali domestici che sono presentate da 'ABC' se stesso.