powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Функция ранжирования
3 сообщений из 3, страница 1 из 1
Функция ранжирования
    #39771900
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Помогите пож составить ранжирование таким образом, чтобы в рамках каждого дня и каждого специалиста ранжировались часы в рамках не прерывного диапазона (получить значения как в поле rank )

Составил запрос, дальше не могу продвинуться

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  WITH CTE AS (
    SELECT
          t.id as 'technician_id'
         ,s.date
         ,s.time_from
         ,CAST(s.time_from AS TIME) as 'hour'
         ,ROW_NUMBER() OVER(PARTITION BY t.id, s.date ORDER BY s.time_from) as 'rn'

    FROM time s
    INNER JOIN technic t ON s.technician = t.id
    WHERE s.schedule IS NULL
  )


  SELECT
     c1.*
    ,RANK() over (PARTITION BY c1.technician_id , c1.date, IFNULL(TIMESTAMPDIFF(hour, c2.hour, c1.hour), 1) ORDER BY c1.time_from) as 'megarank'

  FROM CTE c1
  LEFT JOIN CTE c2 ON c1.technician_id = c2.technician_id
                  AND c1.date = c2.date
                  AND c1.rn = c2.rn + 1


technician_iddatetime_fromhourrnrank4613102019-02-102019-02-10 12:00:0012:00:00114613102019-02-112019-02-11 10:00:0010:00:00134613102019-02-112019-02-11 11:00:0011:00:00224613102019-02-112019-02-11 12:00:0012:00:00314613102019-02-112019-02-11 15:00:0015:00:00424613102019-02-112019-02-11 16:00:0016:00:00514613102019-02-112019-02-11 18:00:0018:00:00634613102019-02-112019-02-11 19:00:0019:00:00724613102019-02-112019-02-11 20:00:0020:00:0081
...
Рейтинг: 0 / 0
Функция ранжирования
    #39771977
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jango77,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
-- Ваши исходные данные:
with
  [time] (id, [date], time_from) as
    (
      select i, cast(d as date) as d, cast(t as datetime) as t
        from (values
                (461310,'2019-02-10','2019-02-10 12:00:00'),
                (461310,'2019-02-11','2019-02-11 10:00:00'),
                (461310,'2019-02-11','2019-02-11 11:00:00'),
                (461310,'2019-02-11','2019-02-11 12:00:00'),
                (461310,'2019-02-11','2019-02-11 15:00:00'),
                (461310,'2019-02-11','2019-02-11 16:00:00'),
                (461310,'2019-02-11','2019-02-11 18:00:00'),
                (461310,'2019-02-11','2019-02-11 19:00:00'),
                (461310,'2019-02-11','2019-02-11 20:00:00')
             ) v(i,d,t)
    )
--
-- Один из возможных вариантов запроса:
select id as technician_id
     , [date]
     , time_from
     , cast(time_from as time) as [hour]
     , row_number() over(partition by id, date, grp_id order by time_from desc) as megarank
  from (
         select s.*
             -- Ключевой момент запроса:
              , datepart(hour, time_from) - row_number()over(partition by id, date order by time_from) as grp_id 
           from [time] as s
       ) as v
 order by id, time_from
...
Рейтинг: 0 / 0
Функция ранжирования
    #39772171
jango77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анна, Спасибо Вам!
Это то что нужно!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Функция ранжирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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