powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сгруппировать по Id и вывести по интервалам
7 сообщений из 7, страница 1 из 1
Сгруппировать по Id и вывести по интервалам
    #40060894
overdose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть данные
Id Date
1 01.01.2021
1 10.01.2021
1 30.01.2021
2 15.01.2021
2 30.01.2021

Необходимо получить в таком виде
Id StartDate EndDate
1 01.01.2021 10.01.2021
1 10.01.2021 30.01.2021
2 15.01.2021 30.01.2021

Пожалуйста, помогите написать запрос.
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060907
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table #t (ID int, dDate date)

insert into #t values (1, '20210101'),
(1, '20210110'),
(1, '20210130'),
(2, '20210115'),
(2, '20210130')
go

select v0.ID, v0.StartDate, t.dDate as EndDate from (select min(dDate) as StartDate, ID from #t group by ID) v0
inner join #t t on t.ID = v0.id and t.dDate <> v0.StartDate 

go

drop table #t
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060911
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

Во второй строке будет неправильный StartDate.

Как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
with cte as (
	select t.ID, t.dDate, row_number() over(partition by t.ID order by t.dDate) as [RN]
	from #t t
)
select s.ID, s.dDate as [StartDate], e.dDate as [EndDate]
from cte s
	inner join cte e on e.ID = s.ID and e.RN = s.RN + 1;
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060912
overdose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist,
Спасибо огромное! То, что нужно.
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060913
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
;
WITH
cte AS (
  SELECT
    [Id],
    [StartDate] = LAG( [Date] ) OVER ( PARTITION BY [Id] ORDER BY [Date] ),
    [EndDate] = [Date],
    [rn] = ROW_NUMBER() OVER ( PARTITION BY [Id] ORDER BY [Date] )
  FROM
    #t
)
SELECT
  [Id],
  [StartDate],
  [EndDate]
FROM
  cte
WHERE
  [rn] > 1
;
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060919
overdose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegael,
Да, Вы правы. Спасибо!
...
Рейтинг: 0 / 0
Сгруппировать по Id и вывести по интервалам
    #40060932
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael
PaulWist,

Во второй строке будет неправильный StartDate.



2 Ennor Tiegael

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


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