2017-04-03 95 views
0

在SQLite數據庫,我有一個「用戶」表如下SQLite的加入 - 查詢最近的帖子將每個用戶

用戶:

| user_id | user      
| 1  | John    
| 2  | Peter  

一個「帖子」表如下:

| post_id | user_id  | text 
| 10  | 1   | blah blah blah 
| 11  | 1   | blah blah blah 
| 12  | 2   | blah blah blah 

我使用這個代碼來連接兩個表:

SELECT * FROM Users JOIN Posts USING (user_id) 

現在我有不同的用戶所有的職位名單如下:

| user_id | user   | post_id | text   
| 1  | John   | 10  | blah blah blah 
| 1  | John   | 11  | blah blah blah 
| 2  | Peter  | 12  | blah blah blah 

假設有更大POST_ID後張貼最近。
現在我想要每個用戶的最新帖子列表(在這種情況下,行#2和#3)。
我該怎麼做?
我想刪除所有行(對於每個用戶),除了最大的post_id(最近)的行,這是一個很好的解決方案嗎?我應該如何查詢它?

+0

可能重複的[SQL:篩選最大值的行](http://stackoverflow.com/questions/24708109/sql-filter-rows-with-max-value) – Shadow

回答

1

您可以使用,讓你最新帖子爲每個用戶內部查詢,那麼當與其他兩個參加該表將作爲一個過濾器。

select * 
from users u 
join (
      select user_id, max(post_id) post_id 
      from Posts 
      group by user_id 
     ) r 
on  u.user_id = r.user_id 
join posts p 
on  r.post_id = p.post_id and 
     r.user_id = p.user_id 
+0

這給了我3個重複的列!但是,謝謝,我改變了一下,它運作良好。我刪除了最後3行,並將「u.user_id ...」改爲「using(id)」 –

0

你必須改變一點點的查詢。你必須編寫查詢如下:

SELECT * FROM Users Join Posts Using(user_id) order by post_id desc; 
+0

但我想刪除重複的行,這隻會改變順序的行 –

+0

更改查詢: 從用戶U中選擇不同的U.user_id,U.user,P.post-id,P.text,其中U.user_id = P.user_id order by post_id desc; –

1

在SQLite的(但不是在任何其他DB),使用GROUP BY時,你可以使用MAX()或MIN()選擇一組返回哪一行:

SELECT user_id, 
     user, 
     max(post_id) AS post_id, 
     text 
FROM Users 
JOIN Posts USING (user_id) 
GROUP BY user_id;