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

SQLite Join-按每个用户查询最近的帖子,sqlite,android-sqlite,Sqlite,Android Sqlite,在sqlite数据库中,我有一个Users表,如下所示 用户: | user_id | user | 1 | John | 2 | Peter a员额表如下: | post_id | user_id | text | 10 | 1 | blah blah blah | 11 | 1 | blah blah blah

在sqlite数据库中,我有一个Users表,如下所示

用户:

| 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
| user_id  | user         | post_id   | text           
| 1        | John         | 10        | blah blah blah
| 1        | John         | 11        | blah blah blah
| 2        | Peter        | 12        | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
我使用此代码连接两个表:

SELECT * FROM Users JOIN Posts USING ( user_id )
现在,我有一个由不同用户发布的所有帖子的列表,如下所示:

| post_id | user_id     | text
| 10      | 1           | blah blah blah
| 11      | 1           | blah blah blah
| 12      | 2           | blah blah blah
| user_id  | user         | post_id   | text           
| 1        | John         | 10        | blah blah blah
| 1        | John         | 11        | blah blah blah
| 2        | Peter        | 12        | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;
假设post_id较大的帖子是最近发布的。 现在我想要一个由每个用户列出的最新帖子的列表,在本例中是第2行和第3行。 我该怎么做?
我正在考虑删除每个用户的所有行,除了最近具有最大post_id的行之外,这是一个好的解决方案吗?我应该如何查询它?

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

| post_id | user_id     | text
| 10      | 1           | blah blah blah
| 11      | 1           | blah blah blah
| 12      | 2           | blah blah blah
| user_id  | user         | post_id   | text           
| 1        | John         | 10        | blah blah blah
| 1        | John         | 11        | blah blah blah
| 2        | Peter        | 12        | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;

您必须稍微更改查询。您必须按如下方式编写查询:

| post_id | user_id     | text
| 10      | 1           | blah blah blah
| 11      | 1           | blah blah blah
| 12      | 2           | blah blah blah
| user_id  | user         | post_id   | text           
| 1        | John         | 10        | blah blah blah
| 1        | John         | 11        | blah blah blah
| 2        | Peter        | 12        | blah blah blah
SELECT * FROM Users Join Posts Using(user_id) order by post_id desc;

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

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

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

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

在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;

在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;

可能重复的可能重复的但我想删除重复的行,这只会更改行的顺序更改查询:从用户U中选择不同的U.user\U id、U.user、P.post-id、P.text,Posts P,其中U.user\U id=P.user\U id按post\U id desc排序;但我想删除重复的行,这只会更改行的顺序更改查询:从用户U中选择不同的U.user\U id,U.user,P.post-id,P.text,Posts P,其中U.user\U id=P.user\U id按post\U id desc排序;这给了我3个重复的列!但是谢谢,我改了一点,效果很好。我删除了最后3行并更改了用户id。。。要使用idThis,我会得到3个重复的列!但是谢谢,我改了一点,效果很好。我删除了最后3行并更改了用户id。。。使用身份证