mytable
은 자동으로 증가하는 id
열을 정수로 가지며 모든 용도와 목적으로 이 경우 인 경우 더 높은 ID가 최신 값을 나타내는 것으로 안전하게 간주 할 수 있습니다. mytable
에는테이블에 대한 외래 키인 group_id
이라는 인덱싱 된 열이 있습니다.MySQL에서 동적 UNION 쿼리는 어떻게 수행합니까?
각 group_id
에서 가장 최근 5 개의 행을 선택하려면 신속하고 더러운 쿼리를 mytable
에서 사용하고 싶습니다.
세 개의 그룹, 난 할 수 있기 때문에이 쉬운 것이 있다면 :
SELECT * FROM `mytable` WHERE `group_id` = 1 ORDER BY `id` DESC LIMIT 5
UNION ALL
SELECT * FROM `mytable` WHERE `group_id` = 2 ORDER BY `id` DESC LIMIT 5
UNION ALL
SELECT * FROM `mytable` WHERE `group_id` = 3 ORDER BY `id` DESC LIMIT 5
그러나, 그룹의 고정 된 수의가없는가. 그룹은 groups
테이블의 내용에 따라 결정되므로 불확정 한 숫자가 있습니다.
지금까지 내 생각 :
- 나는 그 다음
EXECUTE
의groups
테이블에CURSOR
을 잡고 새로운 SQL 쿼리 문자열을 만들 수있다. 그러나, 그것은 정말 지저분 해 보입니다. 나는 그것을하는 더 좋은 방법이 있기를 바라고 있습니다. groups
테이블에서CURSOR
을 잡고 임시 테이블에 삽입 한 다음 그 테이블에서 선택할 수 있습니다. 그러나, 그것은 또한 정말 지저분 해 보입니다.- 그냥
CURSOR
을 잡고 그곳에서 직접 행을 반환 할 수 있는지 잘 모르겠습니다. SQL 서버의@table
유형 변수와 비슷한 것이 있습니까? - 내가 가장 기대하는 것은 내가 이것을 과소 평가하고 SELECT 문에서이를 수행 할 수있는 방법이 있다는 것입니다.
여기서 무엇을하고 있는지 자세히 알아볼 수있는 곳은 어디입니까? 전에'@x : = '구문을 본적이 없습니다. – SoaperGEM
@SoaperGEM 여기에 좋은 자습서 중 하나입니다 http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ –