2011-11-16 8 views
4

私はデータベース駆動型のコミュニティWebサイトを用意しています。各エントリには日付があります。今では、エントリ数が1000の最初のユーザーが誰だったかを知りたいと思います。これはSQLクエリで可能ですか、それともプログラマチックに行う必要がありますか?または他のソリューション?集計値から「xを行った最初のユーザー」を確認してください

+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 

をOFFSETこれは私が3つのメッセージに達した最初のユーザーを見つける例です。それがあなたを助けることを願ってください。

+1

素晴らしい!あなたは天才です! – chiborg

0

私は、MySQLの構文を覚えていないが、私はあなたがこのような何かをすべきだと思う:

まず、(もちろん、ユーザーごとに)各エントリにそのカウントを追加します。そこにそれを行うためのいくつかのMySQLの特定の方法は、おそらくですが、他のすべてが失敗した場合、あなたは、行われたものと

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

ような何かを入力時間によって1000の数、順序で最初のエントリを選択し、取ることができますそのユーザー。私はGROUP BYをした後の時間に集計を使用していないので、私はそこに終わりBY ORDERの配置のわからない

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

、ネストされたクエリか何かが必要になる場合があります。

しかし、あなたはおそらく探していた部分がLIMITのXであるが、Y

関連する問題