SQL для выбора записей на конкретную дату с учетом времени создания и изменения - PullRequest
0 голосов
/ 19 декабря 2011

КОНТЕКСТ

Мое руководство попросило меня "проанализировать" нашу базу данных отслеживания проблем - они используют ее для каталогизации наших внутренних ошибок и т. Д. Мои навыки работы с SQL и БД примитив так что мне нужна помощь.

ДАННЫЕ

Я получил одну таблицу из 3 миллионов записей.Это составляет 250K ошибок.Каждая ревизия ошибки - это строка в таблице.Вот так 250 тысяч ошибок заканчиваются в 3 миллионах записей.

Данные выглядят так:

BugID  Created      Modified     AssignedTo  Priority  Status
27     mar-31-2003  mar-31-2003  mel         2         Open
27     mar-31-2003  apr-01-2003  mel         1         Open
27     mar-31-2003  apr-10-2003  steve       1         Fixed

Таким образом, у меня есть полная история каждой ошибки и я вижу, как они развивались каждый день..

ЧТО Я ХОЧУ ПРИОБРЕТИТЬ

У меня есть много вещей, которые меня попросили представить в виде отчетов.Но самый основной вопрос, который мне задали, - дать возможность кому-то посмотреть на ошибки, которые существовали на определенную дату.

Например, если кто-то запросил все ошибки на 1 марта 2003 г., тогда ошибка27 не в результате, потому что он не существует в тот день.Или, если бы они попросили об ошибках 7 апреля, они увидели бы ошибку 27, и она все еще помечена как открытая

МОЙ СПЕЦИФИЧЕСКИЙ ВОПРОС

Учитывая схему, которую я обрисовал, какой запрос SQL предоставит представлениезаписей на определенную дату?

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

Я использую Microsoft SQL Server 2008

ЧТО Я ПОПРОБОВАЛ ТАК ДАЛЕЕ

Как ясказал, что мои навыки SQL примитивны.Я смог использовать предложения WHERE, чтобы отфильтровать изменения, внесенные после целевой даты, и ошибки, которых не было к целевой дате, но я не смог найти единственную запись, произошедшую в эту дату.

1 Ответ

4 голосов
/ 19 декабря 2011
WITH
  sequenced_data AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY BugID ORDER BY Modified DESC) AS sequence_id,
    *
  FROM
    yourTable
  WHERE
    Modified <= @datetime_stamp
)
SELECT
  *
FROM
  sequenced_data
WHERE
  sequence_id = 1

Предполагается, что вы хотите увидеть исправленные ошибки. Если вы хотите отфильтровать ошибки, которые были исправлены «давно» (скажем, 30 дней), добавьте это ...

AND (Status <> 'Fixed' OR Modified >= DATEADD(DAY, -30, @datetime_stamp))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...