我有两个表格中的用户数据,如下:
1. USERID | USERPOSTID
2. USERPOSTID | USERPOST | LAST_EDIT_TIME
如何获取每个用户的最后编辑的文章和时间?假设每个用户有5篇文章,每篇文章至少被编辑一次。
我需要编写一个循环来遍历每个用户,找到具有MAX(LAST_EDIT_TIME)的USERPOST,然后收集值吗?我尝试使用GROUP BY,但我无法将USERPOSTID或USERPOST放入聚合函数中。谢谢。
我有两个表格中的用户数据,如下:
1. USERID | USERPOSTID
2. USERPOSTID | USERPOST | LAST_EDIT_TIME
如何获取每个用户的最后编辑的文章和时间?假设每个用户有5篇文章,每篇文章至少被编辑一次。
我需要编写一个循环来遍历每个用户,找到具有MAX(LAST_EDIT_TIME)的USERPOST,然后收集值吗?我尝试使用GROUP BY,但我无法将USERPOSTID或USERPOST放入聚合函数中。谢谢。
Seems like something like this should work:
create table users(
id serial primary key,
username varchar(50)
);
create table posts(
id serial primary key,
userid integer references users(id),
post_text text,
update_date timestamp default current_timestamp
);
insert into users(username)values('Kalpit');
insert into posts(userid,post_text)values(1,'first test');
insert into posts(userid,post_text)values(1,'second test');
select *
from users u
join posts p on p.userid = u.id
where p.update_date =
( select max( update_date )
from posts
where userid = u.id )
fiddle: {{链接1:http://sqlfiddle.com/#!15/4b240/4/0}}
你可以在这里使用一个窗口函数:
select
USERID
, USERPOSTID
from
USERS
left join (
select
USERID
, row_number() over (
partition by USERID
order by LAST_EDIT_TIME desc) row_num
from
USERPOST
) most_recent
on most_recent.USERID = USERS.USERID
and row_num = 1
distinct on
子句。 - Abelistodistinct on
对于每个组仅返回一行,即使有多行具有相同的最大LAST_EDIT_TIME
值。在这种情况下,Andreas's solution 看起来更有效率。 - Abelisto