пятничная задачка

Elic
Дата: 02.03.2007 18:38:23
10g:
select
    min(connect_by_root name) as name,
    min(connect_by_root value) as value,
    max(length(sys_connect_by_path('', '+'))) as result
  from t
  connect by name > prior name and (value - prior value) between 0 and 1
  group by connect_by_root name
;
Vladimir Sitnikov
Дата: 02.03.2007 18:43:05
Elic
10g:

А для 8-ки, и без cartesian и group/connect by ?

В любом случае, всем спасибо за предложенные варианты. Про start_of_group почти забыл.
Elic
Дата: 02.03.2007 18:59:04
Vladimir Sitnikov
А для 8-ки, и без cartesian и group/connect by ?
Если у тебя самого решения нет, то ты слишком корыстно мимикрировал название темы :)
Vladimir Sitnikov
Дата: 02.03.2007 19:07:30
Elic
Vladimir Sitnikov
А для 8-ки, и без cartesian и group/connect by ?
Если у тебя самого решения нет, то ты слишком корыстно мимикрировал название темы :)

Само решение, разумеется, есть :). Оно удволетворяет всем дополнительным ограничениям
NightGhost
Дата: 02.03.2007 19:27:15
Не представишь публике свое решение?
оч интересно узнать
Elic
Дата: 02.03.2007 19:28:20
Vladimir Sitnikov
Само решение, разумеется, есть :). Оно удволетворяет всем дополнительным ограничениям
Не забудь, что пятница подходит к концу :)

BTW, что должно получиться на (1,2,3,4,5,6,7,8,9) ?
dmidek
Дата: 02.03.2007 19:32:55
Vladimir Sitnikov
Elic
Vladimir Sitnikov
А для 8-ки, и без cartesian и group/connect by ?
Если у тебя самого решения нет, то ты слишком корыстно мимикрировал название темы :)

Само решение, разумеется, есть :). Оно удволетворяет всем дополнительным ограничениям


Хм

SQL> 
SQL> with t as (
  2        select 'a' name, 1 value, 4 result from dual union all
  3        select 'b' name, 1 value, 3 result from dual union all
  4        select 'c' name, 2 value, 2 result from dual union all
  5        select 'd' name, 2 value, 1 result from dual union all
  6        select 'e' name, 5 value, 2 result from dual union all
  7        select 'f' name, 6 value, 1 result from dual union all
  8        select 'g' name, 9 value, 1 result from dual union all
  9        select 'h' name, 12 value, 1 result from dual)
 10  select name,
 11         value,
 12         count(*) over(partition by ceil(value / 2)) - count(*) over(partition by ceil(value / 2) order by name) + 1
 13    from t
 14  /

NAME      VALUE COUNT(*)OVER(PARTITIONBYCEIL(V
---- ---------- ------------------------------
a             1                              4
b             1                              3
c             2                              2
d             2                              1
e             5                              2
f             6                              1
g             9                              1
h            12                              1

8 rows selected

SQL> 
Vladimir Sitnikov
Дата: 02.03.2007 19:39:06
dmidek
Хм


Магия входных данных.... Легко ли её подогнать до правильного решения, надо думать.

with t as (
  select 'a' name, 1 value, 4 result from dual union all
  select 'b' name, 1 value, 3 result from dual union all
  select 'c' name, 2 value, 2 result from dual union all
  select 'd' name, 2 value, 1 result from dual union all
  select 'e' name, 5 value, 2 result from dual union all
  select 'f' name, 6 value, 1 result from dual union all
  select 'g' name, 9 value, 1 result from dual union all
  select 'h' name, 12 value, 2 result from dual union all
  select 'i' name, 13 value, 1 result from dual
)
Elic
Дата: 02.03.2007 19:40:33
dmidek
 12         count(*) over(partition by ceil(value / 2)) - count(*) over(partition by ceil(value / 2) order by name) + 1
Пока что это форменная магия данных. Начни-ка последовательность с чёта :)
Vladimir Sitnikov
Дата: 02.03.2007 19:41:09
Elic
BTW, что должно получиться на (1,2,3,4,5,6,7,8,9) ?

2,2,2,2,2,2,2,2,1