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