我有:
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和timestamp 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发布订单,但我无法让它发挥作用。
一些帮助?
编辑:我无法解释,但我肯定不知道已经提取了多少条记录,因此我无法使用偏移量。我只知道最后一条记录 - 身份证3和时间戳800 ......答案 0 :(得分:0)
您需要同时按timestamp
和id
订购,以便在具有相同timestamp
的所有行中获得一致排序。然后,当您执行下一个查询时,将最后id
用作WHERE
子句的一部分。
所以这是第一次
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
答案 1 :(得分:0)
使用以下查询
Select *
from table
where not exists (select * from table where id<=3 and timestamp= 800)
order by id asc, timestamp desc
limit 2