Android SQLite查询 - 获取最新的10条记录

Gau*_*ora 23 sql sqlite android android-sqlite

我在我的Android应用程序中保存了一个数据库,并希望检索插入数据库的最后10条消息.

我用的时候:

Select * from tblmessage DESC limit 10;
Run Code Online (Sandbox Code Playgroud)

它给了我10条消息,但来自TOP.但我想要最后 10条消息.可能吗?

假设整个表数据是 -

1,2,3,4,5....30
Run Code Online (Sandbox Code Playgroud)

我写了查询 select * from tblmessage where timestamp desc limit 10

表明 30,29,28...21

但我希望序列为 - 21,22,23...30

Mic*_*lon 38

将DESC更改为ASC,您将获得所需的记录,但如果您需要它们,则需要反转它们的顺序.您可以在自己的代码中执行此操作,也可以像查询一样扩展查询所以:

select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC;
Run Code Online (Sandbox Code Playgroud)

你真的应该总是指定order by子句,而不仅仅是ASC或DESC.


McP*_*ppr 29

在大型数据库上,该ORDER BY DESC语句可能会减慢系统速度,例如raspberry pi.一个很好的避免方法ORDER BYOFFSET命令.你甚至保留了存储的订单:

SELECT * FROM mytable LIMIT 10 OFFSET (SELECT COUNT(*) FROM mytable)-10;
Run Code Online (Sandbox Code Playgroud)

请参阅:http://www.sqlite.org/lang_select.html

查看您的表现:

.timer ON
Run Code Online (Sandbox Code Playgroud)


moo*_*oom 6

答案略有改善:

select * from (select * from tblmessage order by sortfield DESC limit 10) order by sortfield ASC;
Run Code Online (Sandbox Code Playgroud)

Michael Dillon在他的回答中有正确的想法,但是这个例子给出了前几行,倒序:

select * ... (select * ... ASC limit 10) ... DESC
Run Code Online (Sandbox Code Playgroud)

他想要最后一个,应该是:

select * ... (select * ... DESC limit 10) ... ASC
Run Code Online (Sandbox Code Playgroud)