Android中的Sqlite查询通过其他ID获取最后插入的行

时间:2014-12-03 10:19:56

标签: android sqlite

我在Android中使用SQLite

我有一张桌子。

idrow---message---date------transmitter----id_name
 1    |  Hello  | 13-09-14 |   Mike      |    307
 2    |  Thanks | 17-09-14 |   Louis     |     12
 3    |  Byebye | 18-09-14 |   Charlie   |    879
 4    |  Hello  | 18-09-14 |   Mike      |    307
 5    |  bllaaa | 18-09-14 |   Mike      |    307
 6    |  Nice   | 19-09-14 |   Charlie   |    879
 7    |  Great  | 19-09-14 |   Mike      |    307

我想为每个id_name获取最后插入的行。

例如:

id_name 307:7 |太棒了19-09-14 |迈克|

id_name 879 6 |很好| 19-09-14 |查理|

路易十二二2 |谢谢| 17-09-14 |路易斯|

我尝试使用此功能,但无法按预期工作

 String Query = "Select * from TableName, max(id_row) group by id_name" ;

3 个答案:

答案 0 :(得分:3)

您的查询仅适用于SQLite 3.7.11或更高版本,在API级别16(Jelly Bean)之前您将无法使用它。

在早期版本中,不保证非分组列来自与MAX()匹配的行。 您必须单独查找每个id_name的最大ID,或者使用连接:

SELECT TableName.*
FROM TableName
JOIN (SELECT MAX(id_row) AS id_row
      FROM TableName
      GROUP BY id_name
     ) USING (id_row)

或IN:

SELECT *
FROM TableName
WHERE id_row IN (SELECT MAX(id_row)
                 FROM TableName
                 GROUP BY id_name)

(两个查询的工作方式相同。)

答案 1 :(得分:0)

嗯,您也可以使用以下代码......

SELECT * FROM TableName ORDER BY idrow DESC LIMIT 1

可能因为使用id_row而不是idrow

而收到错误

答案 2 :(得分:-1)

试试这个

select * from TableName
where id_row = (SELECT max(id_row) FROM TableName)
order by id_row desc
limit 1