반응형
원하는 작업을 수행하는 다음 쿼리가 있지만 하위 쿼리없이이 작업을 수행 할 수 있다고 생각합니다.
SELECT *
FROM (SELECT *
FROM 'versions'
ORDER BY 'ID' DESC) AS X
GROUP BY 'program'
내가 필요한 것은 프로그램별로 그룹화하는 것이지만 "ID"값이 가장 높은 버전의 개체에 대한 결과를 반환하는 것입니다.
과거 경험에서 이와 같은 쿼리는 MySQL에서 작동해야 하지만 어떤 이유로 든 그렇지 않습니다.
SELECT *
FROM 'versions'
GROUP BY 'program'
ORDER BY MAX('ID') DESC
내가 원 하는 것은 MySQL이 먼저 ORDER BY를 수행하고 그런 다음 GROUP BY를 수행하도록하는 것이지만, 먼저 GROUP BY를 수행 한 다음 ORDER BY를 수행하도록 고집합니다. 즉, 정렬 결과를 그룹화하는 대신 그룹화 결과를 정렬합니다.
물론 쓸 수 없습니다
SELECT * FROM 'versions'ORDER BY 'ID'DESC GROUP BY '프로그램'
감사.
해결 방법
이것은 그것을 수행하고 (program, id)에 복합 색인이있는 한 꽤 잘 작동합니다. 하위 쿼리는 각 프로그램 분기의 첫 번째 ID 만 검사하고 외부 쿼리에서 필요한 레코드를 빠르게 검색해야합니다.
select v.*
from
(
select program, MAX(id) id
from versions
group by program
) m
inner join versions v on m.program=v.program and m.id=v.id
참조 페이지 https://stackoverflow.com/questions/4716369
반응형
'MySql' 카테고리의 다른 글
MySQL : 시간 간 비교 (0) | 2020.10.21 |
---|---|
MySQL의 열 이름 "order"에 대한 대안 (0) | 2020.10.21 |
MySQL JSON 데이터에 대한 SQL과 유사한 쿼리를 허용하는 자바 스크립트 라이브러리? (0) | 2020.10.21 |
MySQL mysql의 테이블에서 N 개의 오래된 레코드 삭제 (0) | 2020.10.21 |
MySQL에서 "insert ignore"와 replace의 성능 차이는 무엇입니까? (0) | 2020.10.21 |
댓글