2016-07-01 1 views
-2

を皮切り:SQL私が持っている列

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

私は最初の2つのレコードを取得し、タイムスタンプDESCで

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

を命じ、私は、タイムスタンプDESC順の次の2つのレコードを取得することはできません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 

もそれを試してみたが、再び正しくないIDが4と5を返します。

など...私が試みているのはすべて動作していないということです。

クエリは正確に返す必要があります:

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

私はまた、idで順番に再生しようと、私はそれが仕事を得ることができません。

いくつかお手伝いしますか?

EDIT:説明できませんが、抽出されたレコードの数がわからないため、オフセットは使用できません。 ID 3およびタイムスタンプ800 ...

答えて

0

あなたは同じtimestampを持つすべての行内で一貫順序を得るように、timestampidの両方で注文する必要がある - 私はちょうど最後のレコードを知っています。次に、次の問合せを実行するときには、最後のidWHERE句の一部として使用します。

それは

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 
関連する問題