powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Фотошоп, возвращай свою пятничную про последовательности
6 сообщений из 56, страница 3 из 3
Фотошоп, возвращай свою пятничную про последовательности
    #40024945
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miserere
Хочешь побахвалиться - сделай свои
Код: plsql
1.
Elapsed: 00:00:00.15


с одним measure


А что было такое условие? А если ты "задался вопросом как уйти от" то неплохо бы информировать остальных ибо скорость была критерием решения данной задачи.

SY.
...
Рейтинг: 0 / 0
Фотошоп, возвращай свою пятничную про последовательности
    #40025027
Miserere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прежде чем раздавать советы, SY, придерживайся их сам.
Ты исчерпался придумать что-то еще и скатился в производительность, и теперь навязываешь этот критерий окружающим как главный
...
Рейтинг: 0 / 0
Фотошоп, возвращай свою пятничную про последовательности
    #40025052
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miserere
Прежде чем раздавать советы, SY, придерживайся их сам.
Ты исчерпался придумать что-то еще и скатился в производительность, и теперь навязываешь этот критерий окружающим как главный
С выходом на дубликат через флажок и его вариациями любой дурак сделает. Хочешь побахвалиться - сделай свои
с одним measure


Хочешь с одним measure? Пожалуйста:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select  a
  from  dual
  model
    dimension by(0 n,0 a)
    measures(0 dummy)
    rules iterate(9999)
      (
       dummy[0,0] = max(dummy)[iteration_number,any] - iteration_number - 1,
       dummy[0,0] = case
                      when     dummy[0,0] > 0
                           and
                               max(dummy)[any,dummy[0,0]] is null
                        then dummy[0,0]
                    else dummy[0,0] + 2 * (iteration_number + 1)
                  end,
      dummy[
            iteration_number + 1,
            dummy[0,0]
           ] = dummy[0,0]
     )
/



Производительность


Твое решение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> with t as (
  2  select a from dual
  3  model
  4  dimension by(0 id)
  5  measures(0 a)
  6  ignore nav
  7  rules iterate(10000)
  8  (
  9  a[iteration_number] = case when a [iteration_number - 1 ] > iteration_number then 1 else -1 end,
 10  a[iteration_number] = a[iteration_number - 1] - iteration_number * a[iteration_number],
 11  update a[id] = case when count(*) over(partition by a order by id) > 1 then a[cv(id) - 1] + cv(id) else a[cv(id)] end
 12  )
 13  )
 14  select count(*),sum(a) from t
 15  /

  COUNT(*)     SUM(A)
---------- ----------
     10000   82590002

Elapsed: 00:04:34.68
SQL>



Mое решение:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
SQL> with t as (
  2  select  a
  3    from  dual
  4    model
  5      dimension by(0 n,0 a)
  6      measures(0 dummy)
  7      rules iterate(9999)
  8        (
  9         dummy[0,0] = max(dummy)[iteration_number,any] - iteration_number - 1,
 10         dummy[0,0] = case
 11                        when     dummy[0,0] > 0
 12                             and
 13                                 max(dummy)[any,dummy[0,0]] is null
 14                          then dummy[0,0]
 15                      else dummy[0,0] + 2 * (iteration_number + 1)
 16                    end,
 17        dummy[
 18              iteration_number + 1,
 19              dummy[0,0]
 20             ] = dummy[0,0]
 21       )
 22  )
 23  select count(*),sum(a) from t
 24  /

  COUNT(*)     SUM(A)
---------- ----------
     10000   82590002

Elapsed: 00:00:46.52
SQL>



Дерзай.

SY.
...
Рейтинг: 0 / 0
Фотошоп, возвращай свою пятничную про последовательности
    #40027612
Miserere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, ты умеешь найти лазейку в законодательстве
Приниципиального отличия от твоей предыдущей версии я не вижу, перенес measure в dimension , справился... Все равно ты используешь отдельную колонку чтобы Staxтекущую где-то запоминать
Еще и дольше выполняется. Does it make a difference?
...
Рейтинг: 0 / 0
Фотошоп, возвращай свою пятничную про последовательности
    #40029584
Miserere
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давай пострирейсим, SY
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
SQL>  with t as
 (select level - 2 as id, 0 as a from dual connect by level <= 1e5)
select count(*), sum(a) from (
   select * from t
     model
     dimension by(id)
     measures(a)
     rules iterate(1e5)
     (
      a[iteration_number] = a[iteration_number - 1] - iteration_number 
       + case when 1 > any(a[iteration_number - 1] - iteration_number, a[-(a[iteration_number - 1] - iteration_number)]) then 2 * iteration_number else 0 end,
      a[-a[iteration_number]] = 0
     ) 
) where id > -1;

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:01.64
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:01.25
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:01.58
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:01.65
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:01.31

...
Рейтинг: 0 / 0
Фотошоп, возвращай свою пятничную про последовательности
    #40029594
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохо, правда 99% улучшения производительности за счет пре-генерации таблицы. Но можно чуточку улучшить:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
with t as (
           select level - 1 n,0 a from dual connect by level <= 1e5
          ),
     x as (
           select  n,
                   a
             from  t
             model
               dimension by(n)
               measures(0 a)
               rules iterate(99999)
                 (
                  a[iteration_number + 1] = case
                                              when a[least(0,iteration_number + 1 - a[iteration_number])] is null
                                                then a[iteration_number] - (iteration_number + 1)
                                                else a[iteration_number] + (iteration_number + 1)
                                            end,
                 a[-a[iteration_number + 1]] = 0
                )
           )
select  count(*),
        sum(a)
  from  x
  where n >= 0
/

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.42
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.39
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.39
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.40
SQL>



А теперь твое:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
with t as
 (select level - 2 as id, 0 as a from dual connect by level <= 1e5)
select count(*), sum(a) from (
   select * from t
     model
     dimension by(id)
     measures(a)
     rules iterate(1e5)
     (
      a[iteration_number] = a[iteration_number - 1] - iteration_number
       + case when 1 > any(a[iteration_number - 1] - iteration_number, a[-(a[iteration_number - 1] - iteration_number)]) then 2 * iteration_number else 0 end,
      a[-a[iteration_number]] = 0
     )
) where id > -1
/

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.46
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.44
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.43
SQL> /

  COUNT(*)     SUM(A)
---------- ----------
    100000 8643985072

Elapsed: 00:00:00.42
SQL> 



SY.
...
Рейтинг: 0 / 0
6 сообщений из 56, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Фотошоп, возвращай свою пятничную про последовательности
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]