powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисление временных промежутков.
12 сообщений из 12, страница 1 из 1
Вычисление временных промежутков.
    #39605200
Рихтовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица условная:
Код: sql
1.
create table TableName(user_id varchar(250), date_action datetime, action_from datetime, action_by datetime)



получаем данные на некую дату по конкретному юзеру:

user_id | date_action | action_from | action_by
Вано |10.02.2018 | 10:00 | 12:00
Вано |10.02.2018 | 15:00 | 16:00
Вано |10.02.2018 | 18:00 | 20:00

можно ли запросом вычислить промежутки времени между action_by и action_from соседних записей, чтобы получить следующее:

user_id | date_action | action_from | action_by | freedom_from_action
Вано |10.02.2018 | 10:00 | 12:00 | 08:00-10:00
Вано |10.02.2018 | 15:00 | 16:00 | 12:00-15:00
Вано |10.02.2018 | 18:00 | 20:00 | 16:00-18:00

время 08:00 - константа.
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605208
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рихтовщик,

Что-то похожее было
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605211
Рихтовщик,

в зависимости от версии сервера:
1) [LEAD | LAG] over()
2) [CROSS | OUTER] APPLY(SELECT TOP(1) ...)
3) Коррелированный скалярный TOP (1) ползапрос в SELECT-листе
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605213
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,

Блин - опять я усложняю...
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605214
Рихтовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
версия 2012
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605221
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рихтовщик,

Код: sql
1.
Select *,isnull(LEAD(action_by) Over (Partition by user_id, date_action Order by action_by),'8-00') as Prev_Action_By From TableName
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605225
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly, спешишь...

Код: sql
1.
Select *,isnull(LAG(action_by) Over (Partition by user_id, date_action Order by action_by),'8:00') as Prev_Action_By From @TableName
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605534
Рихтовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,

спасибо, а можно как-то дополнительно обработать именно последнюю строку?
я добавил в запрос row_number() over(order by action_from), получил порядковые номера, можно как-то это использовать?
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605755
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kopelly,
смотри, что 2012 умеет:
Код: sql
1.
2.
3.
4.
5.
SELECT 
  *,
  [Prev_Action_By] = LAG( [action_by], 1, '8:00' ) OVER ( PARTITION BY [user_id], [date_action] ORDER BY [action_by] )
FROM
  @TableName
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605888
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РихтовщикKopelly,

спасибо, а можно как-то дополнительно обработать именно последнюю строку?
я добавил в запрос row_number() over(order by action_from), получил порядковые номера, можно как-то это использовать?

Case When row_number() over(order by action_from) = count(*) over() Then [Обработка] Else NULL end
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605889
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рихтовщик,

При необходимости добавляешь в оба Over () выражение Partition By
...
Рейтинг: 0 / 0
Вычисление временных промежутков.
    #39605901
Рихтовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly,

круто, спасибо.
где бы про эти оконные функции почитать, чтобы разжевано было?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вычисление временных промежутков.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]