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

Откуда:
Сообщений: 382
Например есть таблица с одним полем:

1
2
3
4
5
7
8
9



Как из нее получить такое:

1      5
7      3



т.е. то 1 до конца неприрывного диапазона - пять строк,
от семи до конца диапазона - три


и т.д.
16 май 17, 17:16    [20486110]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать запрос для выявления диапазонов?  [new]
iiyama
Member

Откуда:
Сообщений: 642
sql_user2,

LEAD
если версия позволяет
16 май 17, 17:25    [20486148]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать запрос для выявления диапазонов?  [new]
iiyama
Member

Откуда:
Сообщений: 642
sql_user2,
хотя так лучше
declare @T1 table(id int)
insert into @t1 values(1),(2),(3),(4),(5),(7),(8),(9)

;WITH C AS
(
  SELECT id, id - DENSE_RANK() OVER(ORDER BY id) AS grp
  FROM @T1
)
SELECT MIN(id) AS [1], MAX(id) AS [2]
FROM C
GROUP BY grp;
16 май 17, 17:34    [20486191]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать запрос для выявления диапазонов?  [new]
Добрый Э - Эх
Guest
sql_user2,

разбаянистый-баян. RTFM инвариант группы.

З.Ы.
Разность между твоим <полем> и row_number() over(order by <поле>)
16 май 17, 17:35    [20486198]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать запрос для выявления диапазонов?  [new]
iiyama
Member

Откуда:
Сообщений: 642
iiyama,
был невнимателен
declare @T1 table(id int)
insert into @t1 values(1),(2),(3),(4),(5),(7),(8),(9)

;WITH C AS
(
  SELECT id, id - DENSE_RANK() OVER(ORDER BY id) AS grp
  FROM @T1
)
SELECT MIN(id) AS [1], MAX(id) - MIN(id)+1
FROM C
GROUP BY grp;
16 май 17, 17:36    [20486202]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать запрос для выявления диапазонов?  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
sql_user2,

разбаянистый-баян. RTFM инвариант группы.

З.Ы.
Разность между твоим <полем> и row_number() over(order by <поле>)

ссылку вставить забыл
16 май 17, 17:39    [20486213]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить