2014-12-03 55 views
0

我在Android中使用SQLiteAndroid中的Sqlite查詢獲取最後插入的行由其他ID

我有一個表如此。

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 |查理|

Of Louis 12 2 |謝謝| 17-09-14 |路易斯|

我嘗試使用這個,但如預期

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

所以你想要反向數據? – Riser 2014-12-03 10:21:31

+0

不,我想例如有帕特里克的最後一條消息,邁克的最後一個..等等。假設我是在教一個用戶列表並且只有他最後一條消息(如whatsapp)的屏幕(活動)。 – 2014-12-03 10:33:36

回答

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) 

,或者在:

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

(兩個查詢的工作方式相同。)

+0

謝謝,這正是我所需要的 – 2014-12-03 17:39:33

-1

嘗試這個

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

這隻返回最後一行,而不是每個'id_name'的一行。 – 2014-12-03 11:03:48

0

好是不行的,你可以使用下面的代碼太...

SELECT * FROM TableName ORDER BY idrow DESC LIMIT 1 

並且可能是因爲使用id_row而不是idrow而導致錯誤

+0

感謝您的回答,但我不想要最後一行。我想每個id_name的最後一行。例如,我有最後一條消息Patrick,最後一個Mike .. etc等。假設是一個屏幕(活動),我在這裏教用戶列表,並且只顯示他的最後一條消息(像whatsapp)。 – 2014-12-03 10:40:48

+0

您可以試試這個:SELECT * FROM TableName ORDER BY idrow DESC GROUP BY id_name' – 2014-12-03 10:53:10

+0

@chitraketuPandey ORDER BY必須在GROUP BY之後,並且不影響分組。 – 2014-12-03 11:03:16