私は課題を解決しようとしており、解決策を考え出しました。私が書いた解決策は、小さなデータセットでは機能しますが、大きなものではうまく機能しないようです。誰かが私が間違っていることを助けてくれますか?大きなサンプルでSQLが動作しない
私は毎日の一意のユーザーを計算することに問題があります(出力の2番目の列)。残りのロジックは正常に動作します。
ジュリアは、SQLコンテストの15日間の学習を行った。コンテストの開始日は2016年3月1日で、終了日は2016年3月15日でした。
少なくとも1日に提出したユニークなハッカーの総数を印刷するクエリを作成します(最初の日からコンテスト)、毎日最大数の投稿を行ったハッカーのhacker_idと名前を見つけます。そのようなハッカーが複数提出している場合は、最低のhacker_idを出力してください。クエリはコンテストの各日にこの情報を日付でソートして表示する必要があります。
ハッカー:
入力形式
次の表は、コンテストのデータを保持hacker_idはハッカーのIDであり、名前はハッカーの名前 です。
提出:submission_dateは、submission_idは、hacker_idが提出をしたハッカーのIDで提出のIDであり、スコアがスコアで提出の日付です提出次のサンプル入力の場合
サンプル入力
、コンテストの終了日が3月6日、2016年
だったと仮定ハッカーテーブル:サブミット表:
**Explanation :-**
2016年3月1日に、ハッカー、および、提出されました。毎日少なくとも1つの投稿を行ったユニークなハッカーがいます。各ハッカーが1つの提出を行ったので、この日に最大数の提出を行ったハッカーとみなされます。ハッカーの名前はアンジェラです。
2016年3月2日、ハッカー、および提出を行いました。今では毎日提出するのは唯一のものなので、毎日少なくとも1回提出したユニークなハッカーがいます。ハッカーの名前はマイケルです。
2016年3月3日に、ハッカー、および提出を行いました。今や唯一のものだったので、毎日少なくとも1回提出した独特のハッカーがいます。各ハッカーが1つの提出を行ったので、この日に最大数の提出を行ったハッカーとみなされます。ハッカーの名前はアンジェラです。
2016年3月4日に、ハッカー、、および提出しました。現在、毎日提出されているだけなので、毎日少なくとも1回提出したユニークなハッカーがいます。各ハッカーが1つの提出を行ったので、この日に最大数の提出を行ったハッカーとみなされます。ハッカーの名前はアンジェラです。
2016年3月5日に、ハッカー、および提出を行いました。現在は毎日提出されているだけなので、毎日少なくとも1件の投稿を行ったユニークなハッカーしかいません。ハッカーの提出物と名前はフランクです。
2016年3月6日にのみ提出されたため、毎日少なくとも1件の投稿を行ったユニークなハッカーしかいません。ハッカーの提出と名前はアンジェラです。
サンプル出力
2016-03-01 4 20703 Angela
2016-03-02 2 79722 Michael
2016-03-03 2 20703 Angela
2016-03-04 2 20703 Angela
2016-03-05 1 36396 Frank
2016-03-06 1 20703 Angela
Schema & Data :-
http://sqlfiddle.com/#!9/844928
Solution :-
SELECT A.submission_date, A.cnt, B.hacker_id, B.name
FROM
(
SELECT submission_date, COUNT(DISTINCT hacker_id) AS cnt
FROM submissions
WHERE submission_date = '2016-03-01'
GROUP BY submission_date
UNION ALL
SELECT submission_date, COUNT(DISTINCT hacker_id)
FROM
(
SELECT DATEADD(day, 1, convert(date, A.submission_date)) AS submission_date, A.hacker_id
FROM
(
SELECT submission_date, hacker_id
FROM submissions
GROUP BY submission_date, hacker_id
) A
INNER JOIN
(
SELECT DATEADD(day, -1, convert(date, submission_date)) AS new_submission_date, hacker_id
FROM submissions
GROUP BY DATEADD(day, -1, convert(date, submission_date)) , hacker_id
) B
ON A.submission_date = B.new_submission_date
AND A.hacker_id = B.hacker_id
) Z
GROUP BY submission_date
) A
INNER JOIN
(
SELECT s.submission_date, s.hacker_id, h.name
FROM
(
SELECT submission_date, hacker_id
FROM
(
SELECT submission_date, hacker_id,cnt, ROW_NUMBER() OVER (PARTITION BY submission_date ORDER BY cnt DESC, hacker_id) AS rn
FROM
(
SELECT submission_date, hacker_id, COUNT(*) AS cnt
FROM submissions
GROUP BY submission_date, hacker_id
) Z
) Y
WHERE rn = 1
) s
INNER JOIN
hackers h
ON s.hacker_id = h.hacker_id
) B
ON A.submission_date = B.submission_date
;
私はスキーマとデータを作成するためにsqlfiddleリンクを追加しました.... – Teja
あなたは「正常に動作するようには思えない」と正確に何を意味するのですか? – HoneyBadger
sqlfiddleの 'colleges'テーブルとの関係は何ですか? –