SQLite Join - 查询每个用户的最新帖子

时间:2017-04-03 15:37:43

标签: sqlite android-sqlite

在sqlite数据库中,我有一个"用户"表格如下

用户:

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

a"帖子"表格如下:

| 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最大(最近)的行,这是一个很好的解决方案吗?我该怎么查询呢?

3 个答案:

答案 0 :(得分:2)

您可以使用内部查询来获取每个用户的最新帖子,然后该表将在与其他两个用户连接时充当过滤器。

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

答案 1 :(得分:1)

在SQLite中(但不在任何其他数据库中),使用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;

答案 2 :(得分:0)

你必须稍微改变一下查询。你必须按如下方式编写查询:

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