powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Построить иерархию
3 сообщений из 3, страница 1 из 1
Построить иерархию
    #40004973
minya13_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
Microsoft SQL Server 2016 (SP2-GDR) (KB4532097) - 13.0.5102.14 (X64)   Dec 31 2019 22:39:35   Copyright (c) Microsoft Corporation  Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor) 



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
DECLARE @hier TABLE (id INT,assigneeID int,dt_from date)
INSERT INTO @hier
(
    id,
    assigneeID,
    dt_from
)
VALUES
(1,3,'2017-08-18'),
(2,3,'2017-12-20'),
(4,3,'2018-03-20'),
(3,5,'2018-06-20'),
(6,5,'2017-08-12'),
(7,5,'2018-01-18'),
(5,9,'2019-01-01'),
(8,9,'2018-07-13'),
(9,null,null),
(12,null,null),
(13,24,'2019-06-15'),
(24,26,'2020-06-20'),
(26,NULL,null)

SELECT * FROM @hier


Есть таблица точек - ID и правопреемник точки - AssigneeID и дата перехода

Как получить таблицу вида

IdAssigneeIDdt_fromdt_to132017-08-182018-06-20152018-06-202019-01-01192019-01-01null232017-12-202018-06-20252018-06-202019-01-01292019-01-01null432018-03-202018-06-20452018-06-202019-01-01492019-01-01null352018-06-202019-01-01392019-01-01null.........

Переход каждой точке правопреемнику с сохранением начальной точки, и как только переход осуществлен, закрывать точку датой перехода к следующей точке
...
Рейтинг: 0 / 0
Построить иерархию
    #40004975
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
minya13_85,

Функция Lag
...
Рейтинг: 0 / 0
Построить иерархию
    #40004981
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t as
(
 select
  a.id, a.assigneeID, a.dt_from, b.dt_from as dt_to
 from
  @hier a join
  @hier b on b.id = a.assigneeID
 where
  not exists(select 1 from @hier where assigneeID = a.id)

 union all

 select
  t.id, a.assigneeID, a.dt_from, b.dt_from as dt_to
 from
  t join
  @hier a on a.id = t.assigneeID join
  @hier b on b.id = a.assigneeID
)
select * from t order by id, dt_from;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Построить иерархию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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