Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 subset in set  [new]
Igor0000
Guest
Vsem privet. Est takie dannie,

		select * from 
	(values (1, 10),(6, 8) , (11, 15), (12, 14), (6, 10), (2, 4)) as t(a, b)


nado sgrupirovat takim obrazom chto subset popadaet v odnu gruppu k setu. seti ne peresekajutsa, subseti mogut peresekatsa, no ne mogut vihodit za diapazon seta

dolgno puluchitsa

a, b, groupID
1 10, 1
2 4 1
8 8 1
6 10 1
11 15 2
12 14 2

spasibo
19 дек 17, 22:30    [21047099]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
select
    t.a, t.b, t.a/10+1 as groupID
from 
    (values (1, 10),(8, 8),(11, 15),(12, 14),(6, 10),(2, 4),(21,7),(25,10)) as t(a, b)
order by
    3
20 дек 17, 00:45    [21047323]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Igor0000
Guest
Ne rabotaet, "a" ne kratno 10. V primere znachenie (16, 17) dolgno obrazovat' novuu gruppu

select
    t.a, t.b, t.a/10+1 as groupID
from 
    (values (1, 10),(8, 8),(11, 15),(12, 14),(6, 10),(2, 4),(21,7),(25,10), (16, 17)) as t(a, b)
order by
    3
20 дек 17, 00:51    [21047331]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Igor0000,

выход моего решения соответствует приведённому вами "dolgno puluchitsa"
либо нормально описывайте правила определения ваших "seti, subseti", либо не совокупляйте людям мозг...
20 дек 17, 01:03    [21047347]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Igor0000
Guest
Ja tak ponimaju vi propustili vecherniy onanizm i teper vam ploho? soboleznuu. Dannie prosto dla primera, kluchevoe eto
"nado sgrupirovat takim obrazom chto subset popadaet v odnu gruppu k setu. seti ne peresekajutsa, subseti mogut peresekatsa, no ne mogut vihodit za diapazon seta"
spasibo vi svobodni
20 дек 17, 01:19    [21047357]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Добрый Э - Эх
Guest
Igor0000,

правильно поставленный вопрос содержит в себе половину ответа.....
опиши ты свою задачу как "объединение пересекающихся [диапазонов | интервалов]" - и даже поиск по форуму вывалили бы тебе кучу решений..... :) ;)
А так, своими сетами и субсетами, только ввёл народ в заблуждение.

Версию сервера ты не озвучил, поэтому буду считать, что она у тебя не ниже 2012... И тогда твоя задача решается таким вот элементарным запросом:
--
-- Твой набор тестовых данных, начало:
with
  t (a,b) as 
    (
      select * 
        from (
               values 
                 (1, 10),(6, 8) , (11, 15), (12, 14), (6, 10), (2, 4)
             ) as t(a, b)
    )
-- Твой набор тестовых данных, кончало...
--
-- Один из возможных вариантов решения поставленной тобой задачи, начало:
select a, b
     , sum(sog) over(order by a,b) as grp_id
  from (
         select a, b
              , case 
                  when max(b) over(order by a, b 
                                    rows between unbounded preceding
                                                     and 1 preceding
                                  ) >= a
                  then 0 
                  else 1 
                end as sog 
           from t
       ) v0
-- Один из возможных вариантов решения поставленной тобой задачи, кончало
--
-- Примерный вид результирующего множества:

 a      b    grp_id
---    ---   ------
  1     10        1
  2      4        1
  6      8        1
  6     10        1
 11     15        2
 12     14        2
20 дек 17, 05:22    [21047441]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Добрый Э - Эх
Guest
желтым выделил то, что не взлетит на версиях, ниже 2012....
20 дек 17, 05:24    [21047442]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Добрый Э - Эх
желтым выделил то, что не взлетит на версиях, ниже 2012....

ROWS BETWEEN - тоже с 2012 только взлетает...
20 дек 17, 12:34    [21048293]     Ответить | Цитировать Сообщить модератору
 Re: subset in set  [new]
Igor0000
Guest
Добрый Э - Эх , spasibo, vash variant resenija vsako luchshe moego

with cte as
(
	select * from 
	(values (1, 10), (6, 8) , (11, 15), (12, 14), (6, 10), (2, 4), (2, 9), (20, 21), (17, 17)) as t(a, b)
)

select 
	t.a, 
	t.b,
	sum(case when b.a is null then 1 else 0 end) over (order by t.a, t.b) GroupID
from 
	cte t
	left join 
	(
		select distinct
			c.a, c.b
		from 
			cte c, cte c1
		where 
		   (c.a between c1.a and c1.b
			or c.b between c1.a and c1.b)
			and c.a !=c1.a and c.b!=c1.b
	) b on t.a = b.a and t.b = b.b
order by 1, 2
20 дек 17, 16:36    [21049314]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить