Оптимизировать запрос - MS SQL Server - PullRequest
0 голосов
/ 29 октября 2018

Проблема:

Я работал над HackerRank Challenge 15 дней изучения SQL ( С заявлением о проблеме можно ознакомиться по предоставленной мной ссылке ). Посмотрев немного, я знаю, что вы можете заменить подзапросы на объединения. Я надеялся, что смогу получить помощь, заменив подзапросы соединением.

Сценарий MS SQL Server:

WITH 
  unique_hackers_on_dates AS
(
   SELECT   
      Submissions.submission_date,
      Submissions.hacker_id,
      COUNT(1) subs_per_hacker_per_day,
      MAX(COUNT(1)) OVER (PARTITION BY submission_date) max_subs_per_day
   FROM
      Submissions
   GROUP BY
      Submissions.submission_date,
      Submissions.hacker_id      
), 
   hacker_with_max_sub AS
(
   SELECT
      unique_hackers_on_dates.submission_date,
      MIN(hacker_id) min_hacker_id
   FROM
      unique_hackers_on_dates
   WHERE
      unique_hackers_on_dates.subs_per_hacker_per_day = unique_hackers_on_dates.max_subs_per_day
   GROUP BY
      unique_hackers_on_dates.submission_date
), 
   dates AS
(
   SELECT   
      unique_hackers_on_dates.submission_date, 
      unique_hackers_on_dates.hacker_id
   FROM
      unique_hackers_on_dates
   WHERE
      unique_hackers_on_dates.submission_date = CAST('2016-03-01' AS Date)
   UNION ALL
      SELECT   
         unique_hackers_on_dates.submission_date, 
         unique_hackers_on_dates.hacker_id
      FROM     
         dates
      INNER JOIN
         unique_hackers_on_dates 
         ON dates.hacker_id = unique_hackers_on_dates.hacker_id AND
            DATEADD(DAY, 1, dates.submission_date) = unique_hackers_on_dates.submission_date
), 
   consec_hackers as
(
   SELECT 
      submission_date,
      count(1) num_consec_hackers
   FROM 
      dates
   GROUP BY
      submission_date
)
SELECT
   consec_hackers.submission_date,
   consec_hackers.num_consec_hackers,
   hacker_with_max_sub.min_hacker_id,
   Hackers.name
FROM
   consec_hackers
INNER JOIN
   hacker_with_max_sub
   on consec_hackers.submission_date = hacker_with_max_sub.submission_date
INNER JOIN
   Hackers 
   ON hacker_with_max_sub.min_hacker_id = Hackers.hacker_id
ORDER BY 
    consec_hackers.submission_date;

Вопрос:

Могу ли я получить помощь в изменении сценария для использования объединений вместо использования подзапросов?

Также будет ли вышеуказанное исправление наиболее эффективным решением?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...