SQL: Как получить информацию о вычитаемой дате в datediff столбце
Всем привет! Я написал следующий скрипт для получения разницы во времени в столбце [Correct_time] между текущей и нижестоящей строкой:
WITH t1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY [Correct_time]) AS ROW1,
[Correct_time] AS tm_1
FROM Table_name
WHERE [Телефон консультанта] LIKE '79636143ХХХ'
),
t2 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY [Correct_time])-1 AS ROW2,
[Correct_time] AS tm_2
FROM Table_name
WHERE [Телефон консультанта] LIKE '79636143ХХХ'
)
SELECT Table_name.*, DATEDIFF(mi,t2.tm_2,t1.tm_1) AS DIFF
FROM t1
LEFT JOIN t2
ON t2.ROW2 = t1.ROW1
LEFT JOIN Table_name
ON t1.tm_1 = Table_name.[Correct_time]
WHERE Table_name.[Телефон консультанта] LIKE '79636143ХХХ'
ORDER BY t1.tm_1
Пример результата ниже:
Correct_time DIFF
2020-02-22 12:12:08.000 -7
2020-02-22 12:19:02.000 -6
2020-02-22 12:25:18.000 -83
2020-02-22 13:48:59.000 -66
Я хочу получать пару строк, разница в минутах между которыми составляет меньше часа. Если же сейчас я добавлю фильтр [< 60], то результат отразит мне только первые две строки:
Correct_time DIFF
2020-02-22 12:12:08.000 -7
2020-02-22 12:19:02.000 -6
А мне нужно иметь в результате информацию в том числе о вычитаемой дате (В моем случае это: "2020-02-22 12:25:18.000").
Буду благодарен за помощь.
Ответы (1 шт):
Автор решения: Герман Борисов
→ Ссылка
WITH t AS
(
SELECT
Table_name.*,
ROW_NUMBER() OVER(ORDER BY [Correct_time]) AS ROW1
FROM Table_name
WHERE [Телефон консультанта] LIKE '79636143ХХХ'
)
SELECT T.*
FROM t
LEFT JOIN t AS tn ON tn.ROW1 = t.ROW1 + 1
LEFT JOIN t AS tp ON tp.ROW1 = t.ROW1 - 1
WHERE DATEDIFF(mi, t.tm_2, tn.tm_1) < 60
OR DATEDIFF(mi, tp.tm_2, t.tm_1) < 60
ORDER BY t1.tm_1