의 나는 다음과 같은 데이터베이스 테이블이 있다고 가정 해 봅시다 : 나는 record_date의 ASC에 의해 주문 데이터와 지난 5 개 행을 잡아하려는데이터베이스에서 마지막 N 개의 행을 순서대로 가져 옵니까?
record_id | record_date | record_value
-----------+-------------+--------------
1 | 2010-05-01 | 195.00
2 | 2010-07-01 | 185.00
3 | 2010-09-01 | 175.00
4 | 2010-05-01 | 189.00
5 | 2010-06-01 | 185.00
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
. 이것은을 쉽게 수행 할 수 있습니다 :
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5 OFFSET 4
내게 줄 것이다 :
record_id | record_date | record_value
-----------+-------------+--------------
6 | 2010-07-01 | 180.00
7 | 2010-08-01 | 175.00
3 | 2010-09-01 | 175.00
8 | 2010-09-01 | 170.00
9 | 2010-10-01 | 165.00
을하지만 이렇게 어떻게 내가 얼마나 많은 기록을 모르고 마법을 계산할 수없는 경우 4의 숫자?
나는이 쿼리를 시도했지만, 5 개 미만의 레코드가있는 경우, 그것은 잘못된 오프셋 부정적 결과 :
SELECT * FROM mytable ORDER BY record_date ASC LIMIT 5
OFFSET (SELECT COUNT(*) FROM mytable) - 5;
그래서 나는이 방법을 수행합니까?
을 : 나는 응용 프로그램에서 정렬하고 싶지 않기 때문에. 두 번째 쿼리의 경우 : 완벽하게 작동하지만 내 DAL에 적합하지 않습니다. 오 잘. 감사! – Kristopher
@Travis Second 쿼리에서 오류가 발생합니다. 중첩 된 쿼리 뒤에는 AS [query_name] 문이 와야합니다. ORDER BY –
@AndyStowAway : 이는 구현의 한계 일 수 있습니다. 나는 익명의 서브 쿼리가 괜찮다고 확신한다 (Postres와 MySQL에서 작동한다는 것을 알고있다). –