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

Откуда:
Сообщений: 103
Добрый вечер.

Ломаю голову над запросом.
Есть таблица
num grp
1 U1
2 U2
3 U1
4 U1

Нужно получить:
1 - 1 U1
2 - 2 U2
3 - 4 U1

т.е. нужно получить интевал номеров для каждой группы.

 create table temp(num int, grp varchar(50))
 insert into temp values(1, 'Г1')
 insert into temp values(2, 'Г2')
 insert into temp values(3, 'Г1')
 insert into temp values(4, 'Г1')

Есть рабочий вариант, но он очень "тяжёлый" нет смысла его выкладывать.

Смотрел в сторону ранжирования, но ничего не получилось :(
29 ноя 11, 18:40    [11679582]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
;with cte as (
   select num, grp, 1 as grp_num
     from temp
    where num = 1
    union all
   select t.num, t.grp, c.grp_num + case when t.grp != c.grp then 1 else 0 end
     from cte as c
     join temp as t on t.num = c.num + 1
)
select * from cte   
если num прерывисто, то перед этим пронумеровать
29 ноя 11, 19:06    [11679664]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
declare @t table (num int, grp varchar(50));
 
insert into @t values(1, 'Г1');
insert into @t values(2, 'Г2');
insert into @t values(3, 'Г1');
insert into @t values(4, 'Г1');
 
with t1 as
(
 select
  num,
  grp,
  row_number() over (order by num) as n1,
  row_number() over (partition by grp order by num) as n2
 from
  @t
)
select
 grp, min(num), max(num)
from
 t1 
group by
 grp, n1 - n2;
29 ноя 11, 19:20    [11679707]     Ответить | Цитировать Сообщить модератору
 Re: Хитрый запрос  [new]
Программист 3 поколения
Member

Откуда:
Сообщений: 103
Спасибо за помощь!

Взял вариант invm, сделал немного по смовоему, всё работает. Спасибо!
30 ноя 11, 10:30    [11681590]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить