从聚合值确定“第一个做x的用户”

时间:2011-11-16 21:56:16

标签: mysql database

我有一个数据库驱动的社区网站,用户可以在其中发布条目。每个条目都有一个日期。现在我想知道谁是第一个条目为1000的用户。这是可能的SQL查询还是我必须以编程方式进行,计算每个帖子直到达到限制?还是其他任何解决方案?

3 个答案:

答案 0 :(得分:2)

create table posts (
id int not null auto_increment primary key,
user_id int,
post_date date
) engine = myisam;


insert into posts (user_id,post_date)
values 
(1,'2011-03-02'),
(1,'2011-04-10'),
(1,'2011-11-13'),
(2,'2011-03-02'),
(2,'2011-03-02'),
(3,'2011-01-01'),
(3,'2011-01-02'),
(3,'2011-01-03');


select * from (
select posts.*,
   @num := if(@user_id = user_id, @num + 1, 1) as rownum,
   @user_id:=user_id as uid
from posts,(select @user_id := 0, @num := 1) as t
order by user_id asc, post_date asc) 
as tab 
where rownum = 3
order by post_date limit 1

这是我找到第一个达到3条消息的用户的示例。希望它可以帮到你。

答案 1 :(得分:1)

SELECT user_id, time
FROM table
LIMIT 1 OFFSET 999
GROUP BY user_id
ORDER BY time

我不确定在那里放置ORDER BY,可能需要嵌套查询或者某些东西,因为我在完成GROUP BY之后没有按时使用聚合。

但你可能正在寻找的部分是LIMIT X OFFSET Y

答案 2 :(得分:0)

我不记得MySQL语法,但我认为你应该这样做:

首先,向每个条目添加其计数(当然,每个用户)。可能有一些MySQL特定的方法,但如果所有其他方法都失败了,你可以做类似

的事情
SELECT Entry.*, 
    (SELECT COUNT(*) FROM Entries E2 WHERE E.id<E2.id AND E.user=E2.user) AS EntryCount

完成后,选择计数为1000的第一个条目,按输入时间排序,然后选择其用户。