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

我有一个保存在我的Android应用程序中的数据库,想要检索插入数据库的最后10条消息。

我用的时候:

Select * from tblmessage DESC limit 10; 

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

假设整个表数据是 –

 1,2,3,4,5....30 

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

它显示30,29,28...21

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

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

 select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC; 

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

在大型数据库上, ORDER BY DESC语句确实可能会降低系统速度,例如raspberry pi。 避免ORDER BY一个很好的方法是OFFSET命令。 你甚至保留了存储的订单:

 SELECT * FROM mytable LIMIT 10 OFFSET (SELECT COUNT(*) FROM mytable)-10; 

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

查看您的表现:

 .timer ON 

答案略有改善:

 select * from (select * from tblmessage order by sortfield DESC limit 10) order by sortfield ASC; 

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

 select * ... (select * ... ASC limit 10) ... DESC 

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

 select * ... (select * ... DESC limit 10) ... ASC 

尝试这个,

 SQLiteDatabase database = getReadableDatabase(); Cursor c=database.rawQuery("sql Query", null); if(c.moveToFirst) { int curSize=c.getCount() // return no of rows if(curSize>10) { int lastTenValue=curSize -10; for(int i=0;i 

然后检索最后10个数据。

如果您的表包含一个主键自动增量的列(例如某些“row_id”),那么您只需要通过此列按DESC顺序进行单选

原始请求看起来像

 select * from table_name order by row_id DESC limit 10 

Android实现是

 private Cursor queryLastEvents() { return getDatabase().query("table_name", null, null, null, null, null, "row_id DESC", "10"); } 

在您的查询中, DESC被解释为表别名。

正如ρяσѕρєяK所提到的,为了能够指定排序方向,您需要首先使用ORDER BY子句进行排序。

要排序的列应该是时间戳(如果有的话)或自动增量列(如表的主键)。

 select * from (select * from table_name order by yourfield ASC limit 10) order by yourfield DESC; 

你不可能有比这更好的解决方案。

 cursor.moveToLast(); while (cursor.moveToPrevious()){ //do something } 

使用相同的查询: select * from tblmessage where timestamp desc limit 10