SQL은

2016-07-01 2 views
-2

내가 가진 : SQL은

Id | Timestamp column 
--------------------------- 
1 | 700 (not ten, but simple to read) 
2 | 800 
3 | 800 
4 | 800 
5 | 600 

내가

Id | Timestamp column 
--------------------------- 
2 | 800 
3 | 800 

이제 타임 스탬프 DESC로 정렬 처음이 개 기록을 얻을, 나는 타임 스탬프 DESC 주문한 다음이 개 기록을 얻을 수 없다 ID 3과 타임 스탬프로 시작하는 800

나는 시도 :

SELECT * FROM table WHERE timestamp < 800 ORDER BY timestamp DESC LIMIT 2 

하지만 Id 1과 5가 올바르지 않습니다.

또한보십시오 :

SELECT * FROM table WHERE timestamp <= 800 ORDER BY timestamp DESC LIMIT 2 

은 그러나 다시 정확하지 않은 ID 2와 3을 반환합니다.

SELECT * FROM table WHERE timestamp <= 800 AND id > 3 ORDER BY timestamp DESC LIMIT 2 

그것을 시도하지만 다시 정확하지 않은 이드는 4와 5를 반환합니다.

기타 등등 ... 시도는 모두 작동하지 않습니다.

쿼리 정확히 반환해야합니다 :

Id | Timestamp column 
--------------------------- 
4 | 800 
1 | 700 

또한 ID로 주문 재생하려고하지만, 나는 그것이 작동 얻을 수 없습니다.

일부 도움이 되었습니까?

편집 : 설명 할 수 없지만 확실히 추출 된 레코드 수를 알 수 없으므로 오프셋을 사용할 수 없습니다. Id3 및 timestamp 800 ...

답변

0

timestampid 모두 주문해야하므로 모든 행에서 동일한 timestamp을 사용하여 일관된 주문을받을 수 있습니다. 다음 쿼리를 수행하면 WHERE 절의 일부로 마지막 id을 사용합니다.

그래서 처음이

SELECT * 
FROM table 
ORDER BY timestamp DESC, id 
LIMIT 2 

@id@timestamp로이의 마지막 행의 ID와 타임 스탬프를 가져 오기의 다음 다음 쿼리해야합니다 :

SELECT * 
FROM table 
WHERE (timestamp = @timestamp AND id > @id) OR (timestamp < @timestamp) 
ORDER BY timestamp DESC, id 
LIMIT 2 

DEMO

+0

완벽한. 효과가 있습니다. 고맙습니다! –

0

아래 검색어를 사용하십시오.

Select * 
from table 
where not exists (select * from table where id<=3 and timestamp= 800) 
order by id asc, timestamp desc 
limit 2