Поиск непрерывных диапазонов

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Lexid
Сообщения: 2
Зарегистрирован: 15 окт 2005, 01:29

Поиск непрерывных диапазонов

Сообщение Lexid » 15 окт 2005, 01:42

Здравсвуйте!

есть такой код.

Код: Выделить всё

select grp, min (num), max (num)
  from (
    select grp, num, num - rownum grp1
    from (select * from ranges order by grp, num))
  group by grp, grp1 ;
Но он никак не хочет исполнятся.
Ругает

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, char 5.
select.

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

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 15 окт 2005, 01:47

SELECT FROM SELECT (aka derived tables) есть только в FB2

Lexid
Сообщения: 2
Зарегистрирован: 15 окт 2005, 01:29

Сообщение Lexid » 15 окт 2005, 02:55

Код: Выделить всё

select
  t1.num, min(t2.num)
  from ranges t1 join ranges t2 on t1.num<= t2.num
where
  not exists (select num from ranges t3 where t1.num- 1 = t3.num)
  and
  not exists (select num from ranges t4 where t2.num+ 1 = t4.num)
group by t1.num
вот так еще можно. но как сунуть туда grp?
если написать так

Код: Выделить всё

select
  t1.num, min(t2.num),grp
  from ranges t1 join ranges t2 on t1.num<= t2.num
where
  not exists (select num from ranges t3 where t1.num- 1 = t3.num)
  and
  not exists (select num from ranges t4 where t2.num+ 1 = t4.num)
group by t1.num,grp
то выводит вообще чушь
Последний раз редактировалось Lexid 15 окт 2005, 02:59, всего редактировалось 1 раз.

Ответить