SQl Сравнить разность всех рядов рядом друг с другом по времени - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть столбец Sql со временем. Я хочу вывести их, если разница во времени между двумя столбцами рядом друг с другом больше 1 часа

     04:05:44
     06:07:48
     08:15:44
     09:05:22
     11:15:27
     11:35:18
     12:16:54

Мой OutPut должен быть таким

     04:05:44 - 06:07:48
     06:07:48 - 08:15:44
     09:05:22 - 11:15:27

Можно ли написать такой запрос в Sql? Если возможно Что я должен знать из SQL для выполнения этого запроса? (Я знаю базовый уровень SQL и изучаю)

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Для MSSQL 2008 вы можете использовать ответ, предоставленный www.Studiosql.nl

Приведенный ниже код работает в MSSQL Server 2012 для отображения результатов по вашему желанию.

Для этого вы можете использовать Функция LAG TSQL .

CREATE TABLE #time (timeValue TIME)

INSERT INTO #time 
values
     ('04:05:44'),
     ('06:07:48'),
     ('08:15:44'),
     ('09:05:22'),
     ('11:15:27'),
     ('11:35:18'),
     ('12:16:54');

SELECT temp.*
from
(SELECT timevalue, case when datediff(HH, lag(timevalue,1,timevalue) OVER(order by TIMEVALUE),timevalue) > 1 THEN CONCAT(lag(timevalue,1,timevalue) OVER(order by TIMEVALUE),' - ',timevalue) else null END AS displayvalue 
FROM #time) as temp
where temp.displayValue is not null
0 голосов
/ 06 сентября 2018

Вы можете использовать CTE и ROW_NUMBER примерно так:

CREATE TABLE #Dates(DateColumn TIME)
INSERT INTO #Dates(DateColumn) VALUES
    ('04:05:44'),
    ('06:07:48'),
    ('08:15:44'),
    ('09:05:22'),
    ('11:15:27'),
    ('11:35:18'),
    ('12:16:54');*/

WITH CTE AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY DateColumn) AS RowNumb
    FROM #Dates AS D
)
SELECT *
FROM CTE AS C
LEFT JOIN CTE AS C2 ON C.RowNumb = C2.RowNumb - 1
WHERE DATEDIFF(MINUTE, C.DateColumn, C2.DateColumn) >= 60
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...