문제점을 해결하기 위해 노력 중이며 해결책을 찾았습니다. 필자가 작성한 솔루션은 작은 데이터 세트에서 작동하지만 큰 데이터 세트에서는 제대로 작동하지 않는 것 같습니다. 누군가 내가 잘못하고있는 걸 도와 줄 수 있니?큰 샘플에서 SQL이 작동하지 않습니다.
매일 (출력의 두 번째 열) 순 사용자를 계산하는 데 문제가 있습니다. 로직의 나머지는 잘 작동합니다.
줄리아는 15 일간 SQL 경연 대회를 실시했습니다. 대회 시작일은 2016 년 3 월 1 일이었으며 종료일은 2016 년 3 월 15 일이었습니다.
매일 제출 한 적이있는 고유 해커의 총수 경연 대회), 해커의 이름과 해커의 이름을 찾으십시오. 해커 중 최대 수가 1 명 이상인 경우 가장 낮은 hacker_id를 인쇄하십시오. 쿼리는 컨테스트의 각 날에 대해이 정보를 날짜별로 정렬하여 인쇄해야합니다. hacker_id는 해커의 ID이며, 이름은 이름 해커의 입니다 :
해커 :
입력 형식
다음 표는 경연 데이터를 보유.
샘플 입력제출하십시오 submission_date는, submission_id는, hacker_id가 제출을 만든 해커의 ID입니다 제출의 ID이며, 점수의 점수 인 제출일입니다 제출.
, 가정이 3월 6일이었다 대회의 종료 날짜, 2016 년
해커 테이블 : 잠수함 sions 표 : 2016년 3월 1일에
**Explanation :-**
해커, 및 제출했다. 매일 적어도 하나의 제출물을 만든 독특한 해커가 있습니다. 각 해커가 하나의 제출을 한 것처럼 이날 최대 수의 제출자를 만든 해커로 간주됩니다. 해커의 이름은 Angela입니다.
2016 년 3 월 2 일에 해커가 제출하여 제출했습니다. 이제는 매일 제출해야하는 유일한 사람 이었으므로 매일 적어도 하나의 제출을 한 독특한 해커가 있습니다. 해커 이름은 마이클입니다.
2016 년 3 월 3 일에 해커가 제출하여 제출했습니다. 지금은 유일한 사람들 이었으므로 매일 적어도 하나의 제출을 한 독특한 해커가 있습니다. 각 해커가 하나의 제출을 했으므로이 날 최대 제출자를 만든 해커로 간주됩니다. 해커의 이름은 Angela입니다.
2014 년 3 월 4 일에 해커,, 및 제출을 제출했습니다. 지금은 매일 제출 만 했으므로 매일 적어도 하나의 제출을 한 독특한 해커가 있습니다. 각 해커가 하나의 제출을 했으므로이 날 최대 제출자를 만든 해커로 간주됩니다. 해커의 이름은 Angela입니다.
2016 년 3 월 5 일에 해커가 제출하여 제출했습니다. 이제는 매일 제출되기 때문에 매일 적어도 하나의 제출을 한 유일한 해커 만 있습니다. 제출 된 해커 이름은 Frank입니다.
2016 년 3 월 6 일에만 제출되었으므로 매일 적어도 하나의 제출을 한 유일한 해커가 있습니다. 해커의 제출 및 이름은 Angela입니다.
샘플 출력
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
;
나는 "그것을 잘 작동하지 않는 것"정확히 당신이 무슨 뜻 이죠 스키마와 데이터 .... – Teja
를 만들 수 sqlfiddle 링크를 추가? – HoneyBadger
sqlfiddle에서'colleges' 테이블과 어떤 관계가 있습니까? –