Опытный снайпер: запрос для поиска ответа на вопросы с конкретными теги


Запрос (на седе)

Этот запрос основывается на предыдущей и включает в себя предложения по кататься по полу от смеха так же, как сейчас упомянули индекса активности.

DECLARE @tag_name nvarchar(35) = '##TagName##';
DECLARE @min_score int = ##MinScore:int?0##;
DECLARE @max_score int = ##MaxScore:int?0##;

-- CTE to find the maximum answer score on a question. Originally suggested by
-- rofl on https://codereview.stackexchange.com/a/189966/21002
WITH BestAnswer AS (
  SELECT
    ParentId,
    Max(Score) as Score,
    MAX(LastActivityDate) as LastActivityDate
  FROM Posts
  WHERE PostTypeId = 2
  GROUP BY ParentId
)

SELECT 
  q.Id AS [Post Link],
  q.Tags,
  q.LastActivityDate as [Last question activity],
  a.LastActivityDate as [Last answer   activity],
  CAST(a.LastActivityDate - q.LastActivityDate as int) as [Activity Index]
FROM 
  Posts q
    INNER JOIN PostTags pt
    ON    q.Id = pt.PostId
    INNER JOIN Tags t
    ON    pt.TagId = t.id
      AND t.TagName = @tag_name
    INNER JOIN BestAnswer a
    ON    q.Id = a.ParentId
      AND a.Score >= @min_score
      AND a.Score <= @max_score
WHERE 
      q.PostTypeId = 1
  AND q.ClosedDate IS NULL
  AND q.AnswerCount > 0
  AND q.AcceptedAnswerId IS NULL
ORDER BY
  [Activity Index] DESC,
  q.LastActivityDate ASC

-- TagName: Tag name as you would use in your post
-- MinScore: Highest answer has at least votes:
-- MaxScore: Highest answer has at most votes:

Это, вероятно, будет последним в серии зомби.

Мотивация

Зомби! Боязнь любого барбекю. Мозги жареные липкие, их запах неприятным, и они никогда не перестанут говорить о crossdead. Но это не подобие зомби, мы страдаем от.

Мы ищем легко-возродить вопрос зомби. Вопросы, которые имеют по крайней мере один 0-результат ответа, но граф как /неотвеченных. Пробуждение просто нуждается в один клик в те случаи: голосуйте. Нам нужно только найти тех Шредингер вопросы и вылечить их.

В первую лекарство случайно включены закрытые вопросы, как это сделал второй. Этот запрос средствами защиты этой неисправности и смотрит только на зомби, которые не были брошены в тюрьму. Он также включает в себя индекс деловой активности (см. ниже).

Цель

На предыдущие вопросы показали, что требования по запрос не особо хорошо общались. На этот раз я постараюсь перечислить все требования к запросу:

  • он должен состоять из подмножества /неотвеченных:
    • он не должен содержать закрытые вопросы
    • он не должен содержать вопросы, которые принято отвечать
    • она не должна содержать вопросов, на которые есть ответ с положительным (>0) результат, если MaxScore больше 0
  • она не должна содержать вопросов, на которые ответы со счетом больше, чем MaxScore
  • она не должна содержать вопросов, на которые ответы со счетом меньшим, чем MinScore
  • она должна возвращать только вопросы, которые были помечены с ##Tagname##
  • она должна включать последнюю дату активности вопрос
  • оно должно включать ответы последняя дата активности этот вопрос
  • он должен включать в себя индекс деловой активности
  • она должна упорядочивать результаты по индексу активности по убыванию и затем по возрастанию даты.

Индекс активности в основном разница между последней активности вопрос и активность на последний вопрос ответа, например

$ \ $ текст{activity_index} = \max_{а \текст{ ответы } м} ох{\текст{значение lastactivitydate}} - q_{\текст{значение lastactivitydate}}. $$

Поскольку любой ответ активность автоматически обновляет этот вопрос LastActivityDate это всегда неположительное. Чем ниже индекс, тем больше вероятность, что новый ответ надо и тока 0-результат ответа недостаточно или не попадает в точку.



Комментарии
1 ответ

Вы сделали красивый запроса здесь. Я просто мелочилась немного.


  • Вы запрос к таблице Posts синонимом q где я бы ожидал p вместо. Я знаю, что вы хотите указать, что это вопрос, но тем не менее я ожидаю p вместо q.

  • Каждый SQL-операторов записывается в столице-буквы А AS ключевое слово записывается в нижнем регистре букв.

То, что вы не учли это ввод тега-синоним, который бы так же.

1
ответ дан 28 декабря 2018 в 07:12 Источник Поделиться