Записывает 1 час до и 1 час после - PullRequest
0 голосов
/ 16 мая 2018

У меня есть таблица с набором данных о неисправностях.Я хотел бы написать запрос, который выбирает все записи в этой таблице, которые произошли от 1 часа до 1 часа после вставки определенной записи.

Пример:

Ошибка "xyz"произошло в 2018-01-03 15: 30: 06.000 Я хотел бы вернуть КАЖДЫЙ талон, который был создан между 14: 30: 06.000 и 16: 30: 06.000 2018-01-03.Я хотел бы, чтобы это произошло во всех случаях этой ошибки с начала года.

Возможно ли это?

Это то, что у меня есть, учитывая приведенный ниже пример.Я до сих пор только возвращаю результаты в таблице temp, а не + 1h и -1h записей из таблицы original .

выберите * в # temp
из инцидента
, где INCIDENT_REPORTED_DATE_TIME> '01 / 01/2018 '
и SUMMARY как "% error%"

выберите i. *
от случая я
присоединиться к #temp т на i.INCIDENT_ID = t.INCIDENT_ID
, где i.INCIDENT_REPORTED_DATE_TIME> = DATEADD (НН, -1, t.INCIDENT_REPORTED_DATE_TIME) * * и тысячу двадцать-один i.INCIDENT_REPORTED_DATE_TIME заказ по i.INCIDENT_REPORTED_DATE_TIME

1 Ответ

0 голосов
/ 16 мая 2018

Вот подход ANSI SQL:

select t.*
from t join
     t t2
     on t2.col = 'xyz' and
        t.created >= t2.created - interval '1 hour' and
        t.created <= t2.created + interval '1 hour'
order by t.created;

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

РЕДАКТИРОВАТЬ:

В SQL Server это выглядит так:

select t.*
from t join
     t t2
     on t2.col = 'xyz' and
        t.created >= dateadd(hour, -1, t2.created) and
        t.created <= dateadd(hour 1, t2.created)
order by t.created;
...