2017-04-03 92 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;