MySQL에서 마지막 N 개 행 선택


121

나는 열 이름에서 MySQL 데이터베이스에서 마지막 50 개 행을 선택하려는 ID 입니다 기본 키 . 목표는 행이 ASC 순서 로 ID 별로 정렬되어야 하는 것이므로이 쿼리가 작동하지 않습니다.

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

또한 행을 조작 (삭제) 할 수 있다는 점이 놀랍기 때문에 다음 쿼리도 작동하지 않습니다.

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

질문 : 조작 할 수 있고 ASC 순서에있는 MySQL 데이터베이스에서 마지막 N 개 행을 검색하는 방법은 무엇입니까?

답변:


236

하위 쿼리로 수행 할 수 있습니다.

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

에서 마지막 50 개 행을 table선택한 다음 오름차순으로 정렬합니다.


5
^ 참고로,이 기사가 MySQL에 관한 것임을 알고 있지만 위의 @DiegoDD의 의견에 대한 응답으로 외부 선택 및 별칭을 생략하면 Postgres (9.3.5)에서 작동하지 않는 것 같다고 조언하고 싶습니다. '오류 : 여러 ORDER BY 절이 허용되지 않음'이 표시됩니다. 그러나 받아 들여진 대답은 Postgres에서 예상대로 작동합니다
allenwlee 2014

감사합니다! 이 쿼리는 내 문제를 해결하는 데 도움이되었습니다. 나는 이것을 몇 시간 동안 찾고 있었다
Arshad

1
JOINS로이 쿼리를 어떻게 적용 할 수 있습니까?
GYaN

@GYaN 추가는 내부 하위 쿼리에서 조인
셰이크 함자

9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

채팅이 전송 된 날짜 (및 시간)를 저장하는 날짜 필드가 있거나 행당 점진적으로 (DESC 별 순서) 또는 Desinscrementally (ASC 별 순서) 데이터로 채워지는 필드가있는 경우 두 번째 열에 넣습니다. 데이터가 순서 여야합니다.

그게 나를 위해 일한 것입니다 !!!! 도움이 되길 바랍니다 !!!!


7
SELECT * FROM table ORDER BY id DESC LIMIT 50

자원을 절약하고 하나의 쿼리를 작성하면 중첩 쿼리를 작성할 필요가 없습니다.


1
쿼리는 결과를 역순으로 반환합니다 (ID 내림차순). @newfurniturey의 쿼리는 마지막으로 삽입 된 행 ( LIMIT내림차순 ID)을 가져오고 최종 결과는 오름차순 ID를 갖습니다.
Robin Kanters 2015

1
귀하의 솔루션은 올바른 순서로 결과를 얻지 못할 것입니다. 대신에 결과를 반대로 가져
오므로

1
그러나 그런 다음 php array_reverse () 또는 선택한 스크립팅 언어에 해당하는 것을 수행하십시오. 데이터베이스는 이러한 작업을 수행 할 필요가 없습니다.
Joe

6
@Joe 스크립팅 언어가 사용되고 있음을 나타내는 질문이 없으므로 안전한 가정이 아닙니다.
Nick Coons

예상 답변은 데이터베이스 쿼리 만 사용하여 이미 정렬되어 있어야합니다.
d4ryl3

-2
select * from Table ORDER BY id LIMIT 30

참고 : * id는 고유해야합니다. * 30쿼리에서 를 대체하여 반환되는 행 수를 제어 할 수 있습니다.


1
해결책을 설명해 주시겠습니까? 괄호 안의 설명은 코드 인 것 같습니다. 전체 문장을 코드 위 / 아래에 넣으십시오. 감사합니다
deHaar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.