Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 DATEDIFF split on different rows  [new]
Ckey
Member

Откуда:
Сообщений: 56
Привет Всем, пожалуйста помогите с решением проблемы. Уже несколько дней думаю как это можно реализовать.

Задача:
1. Есть таблица, которая додержит следующие данные:

declare @from datetime
declare @to datetime 
set @from = '2016-01-01 12:10:00.000'
set @to = '2016-01-01 14:50:00.000'

select @from as [from], @to as [to], DATEDIFF(MINUTE,@from,@to) diff

таких данных в таблице относительно не много, несколько тысяч.

2. нужно данные разбить по времени в следующем формате:

from----------------------------to-------------------------------diff
2016-01-01 12:10:00.000 2016-01-01 13:00:00.000 50
2016-01-01 13:00:00.000 2016-01-01 14:00:00.000 60
2016-01-01 14:00:00.000 2016-01-01 14:50:00.000 50

Заранее спасибо за помощь
16 фев 16, 21:01    [18826179]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ckey
нужно данные разбить по времени в следующем формате:

Нужно придумать алгоритм разбиения что ли ?
16 фев 16, 21:05    [18826191]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
Ckey
Member

Откуда:
Сообщений: 56
автор
Нужно придумать алгоритм разбиения что ли ?

да-да, заранее спасибо...
16 фев 16, 21:53    [18826311]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ckey
да-да, заранее спасибо...

А деньги ?
16 фев 16, 21:54    [18826318]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
Ckey
Member

Откуда:
Сообщений: 56
хотябы подскажите какой функцией это можно сделать или как правильно оно должно выглядеть.

Это не тест для работы, это больше от нехватки знаний.

Спасибо
16 фев 16, 22:07    [18826375]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ckey
хотябы подскажите какой функцией это можно сделать или как правильно оно должно выглядеть.

Это не тест для работы, это больше от нехватки знаний.

Вы создали уже несколько тем, в каждой из которых спрашивали о том, как вам превращать тот или иной диапазон в набор данных. И в каждой из них вам давали почти один и тот же ответ.
16 фев 16, 22:11    [18826393]     Ответить | Цитировать Сообщить модератору
 Re: DATEDIFF split on different rows  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
На скорую руку... Но сделать это можно и по элегантнее:

DECLARE
      @StartDate DATETIME = '2016-01-01 12:10'
    , @EndDate DATETIME = '2016-01-01 14:50'

;WITH cte AS
(
    SELECT s = @StartDate, e = DATEADD(HOUR, 1, DATEADD(HOUR, DATEDIFF(HOUR, 0, @StartDate), 0))

    UNION ALL

    SELECT e, CASE WHEN @EndDate < DATEADD(HOUR, 1, e) THEN @EndDate ELSE DATEADD(HOUR, 1, e) END
    FROM cte
    WHERE s <= DATEADD(HOUR, -1, @EndDate)
)
SELECT s, e, DATEDIFF(MINUTE, s, e)
FROM cte
OPTION (MAXRECURSION 0)
17 фев 16, 11:34    [18828303]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить