Saya mencoba untuk MEMILIH 2 kolom dari subquery dalam permintaan berikut, tetapi tidak dapat melakukannya. Sudah mencoba membuat tabel alias, tetapi masih belum bisa mendapatkannya.
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);
Pada dasarnya, saya mencoba untuk mendapatkan lastComDate
& lastPosterID
dari baris yang sama - baris yang terbaru dalam komentar untuk hewan peliharaan tertentu. Tolong sarankan bagaimana saya bisa mendapatkannya dengan cara yang efisien.
Kueri di atas berfungsi, tetapi tampaknya berlebihan karena baris yang sama diambil dua kali. Selain itu, ORDER BY
klausa secara signifikan lebih lambat daripada fungsi agregat - seperti yang saya temukan saat membuat profil kueri. Jadi, solusi menghindari penyortiran akan dihargai.
mysql
performance
select
subquery
BufferStack
sumber
sumber
deviceID
adalah daripets
meja - yang berarti bahwa hanya tidak mendapatkan saya hewan peliharaan yang disampaikan oleh 'ABC' dirinya.Jawaban:
Anda juga dapat menarik subquery Anda ke tabel temp jika kinerja menjadi terpengaruh di suatu tempat.
sumber
NULL
untuk kedualastComDate
&lastPosterId
untuk semua catatan.Mengingat bahwa tabel Anda terlihat seperti ini:
Kueri ini harus melakukan trik:
sumber