다음 쿼리의 하위 쿼리에서 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
-특정 애완 동물에 대한 의견에서 최신 행입니다. 어떻게 효율적으로 구할 수 있는지 제안하십시오.
위의 쿼리는 작동하지만 동일한 행이 두 번 페치되면 과도한 것으로 보입니다. 또한 ORDER BY
쿼리를 프로파일 링하는 동안 발견 한 것처럼 이 절은 집계 함수보다 훨씬 느립니다. 따라서 정렬을 피하는 솔루션이 좋습니다.
1
코멘트 테이블에 index (petid, id)가 있다면, 순서는 느리지 않을 것입니다. 그러나 가장 먼저해야 할 일은 : 쿼리가 사용자 ID 'ABC'가 코멘트 한 모든 애완 동물을 요구하는 것처럼 보입니다. 마지막 2 개월 이내에 deviceID가 'ABC'가 아닌 경우 (어떤 테이블 deviceID가 열 (애완 동물 및 주석 일 수도 있음)인지, 마지막 주석자가 누구인지, 마지막 주석 날짜인지는 확실하지 않습니다). 맞습니까?
—
Michael-sqlbot
@ Michael-sqlbot-그래, 내가 모 으려고하는 것입니다. 이것은 테이블
—
BufferStack
deviceID
에서 가져온 것입니다. pets
즉, 'ABC'자신이 제출 한 애완 동물을 보내지 마십시오.