2016-06-26 10 views
0

毎日少なくとも1件の投稿を行ったすべてのハッカーを見つけたいと思います。毎日少なくとも1件の投稿を行ったハッカーを見つけるためのMySQLクエリ

テーブルは次のようになります。id、date。

1, 2016-01-01 
2, 2016-01-01 
3, 2016-01-01 
1, 2016-01-02 
2, 2016-01-02 
1, 2016-01-03 

ので、出力は次のようになります。 1は、すべての日に提出してきたので。私が試してみました何

は次のとおりです。

Select id from table 
group by id 
having count(*)=3 /* Since number of days are 3 */ 

ハッカーが日に複数の提出を行うことができますので、しかし、これは正しくありません。私のクエリは失敗します 例:

1, 2016-01-01 
2, 2016-01-01 
3, 2016-01-01 
3, 2016-01-01 
3, 2016-01-01 
1, 2016-01-02 
2, 2016-01-02 
1, 2016-01-03 

これが解決された後、元の質問は次のとおりです。

は上の開始(毎日少なくとも提出をしたユニークなハッカーの総数を印刷するクエリを書きますコンテストの最初の日)、毎日最大数の投稿を行ったハッカーのhacker_idと名前を見つけます。そのようなハッカーが複数提出している場合は、最低のhacker_idを出力してください。

select id 
from t 
group by id 
having count(distinct date) = (select count(distinct date) from t); 
+0

また、毎日提出しなかったハッカーを検索するクエリを考えてもいいですか?あなたの望む結果はその逆です。 – Strawberry

答えて

2

あなたが何を買ってあげるの両方iddateたかあなたはグループ私は信じて:クエリは、私はのように、フレーズ、これを希望日付

+0

毎日少なくとも1回提出したユニークなハッカーの総数(コンテストの最初の日から)を印刷して、ハッカーの名前とハッカーの名前を検索し、毎日最大数の投稿を行ったハッカーの名前を検索します。そのようなハッカーが複数提出している場合は、最低のhacker_idを出力してください。クエリはコンテストの各日にこの情報を日付でソートして表示する必要があります。 – Raj

+0

それを解決できますか?あなたはパスが設定されていると思います – Raj

+0

同じクエリで「一意のハッカーの総数」と「ハッカーIDと名前を検索」を返すことはできません。あなたの2番目のリクエストを達成するためには、サブセレクトに参加しなければならないと言っていました。非常に多くの行がないと仮定すると、代わりに上記のクエリごとに適格な行をすべて返すことになります。つまり、 'COUNT(*)AS total'を選択に追加し、' ORDER BY total DESC、id ASC' at最後に、アプリケーションロジックに各日付の最初の行を取得させます。両方の方法を試して、別の質問をしてください。私はここに十分な部屋がありません。 –

0

によって並べ替えられ、コンテストのそれぞれの日のために、この情報を印刷する必要があります探しています。すなわち:

これは、他の場所の日付範囲に基づいて日数(この場合は3)を取得していることを前提としています。

関連する問題