次のクエリのサブクエリから2列を選択しようとしていますが、選択できません。エイリアステーブルを作成しようとしましたが、まだ取得できませんでした。
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);
基本的に、私は同じ行からlastComDate
&を取得しようとしていますlastPosterID
-特定のペットのコメントの最新の行です。効率的な方法でそれらを取得する方法を提案してください。
上記のクエリは機能しますが、同じ行が2回フェッチされるため、過剰に思えます。さらに、ORDER BY
クエリのプロファイリング中に見つけたように、句は集計関数よりもかなり遅くなります。そのため、ソートを回避するソリューションが必要です。
1
コメントテーブルにindex(petid、id)がある場合、順序は遅くなることはまずありませんが、まず最初に:ユーザーID 'ABC'がコメントしているすべてのペットをクエリが要求しているようです過去2か月以内で、deviceIDが「ABC」ではない場合(ただし、deviceIDが列であるかどうかは不明ですが、ペットやコメントである可能性があります)、最後のコメント者は誰で、最後のコメントの日付です。そうですか?
—
マイケル-sqlbot
@ Michael-sqlbot-はい、それはまさに私が収集しようとしているものです。これ
—
BufferStack
deviceID
はpets
テーブルからのものです。つまり、「ABC」自身によって提出されたペットを取得しないでください。