Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Еще вопрос по аналитике / 25 сообщений из 25, страница 1 из 1
21.01.2014, 11:36
    #38532866
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Всем привет. Задача немного усложнилась :-(

Вот теперь какая задача стоит. Есть селект

Код: sql
1.
select sum(case when date2>date1) over() from ....



В таком варианте, он будет сравнивать условия date2>date1 для каждой пробегаемой строчки. Можно ли сделать так, чтобы он date1 брал из текущей строчки для всей суммы, а date2 из каждой пробегаемой? Может, есть какой-то скрытый столбец, определяющий номер пробегаемой строчки. Типа как:

Код: sql
1.
select sum(case when date2>date1-row_number()) over() from ....



В таком варианте date1-row_number() будет возвращать для каждой суммируемой строки одну и ту же дату (даты гарантировано идут последовательно). Но именно так, как я написал, не работает, не принимает он row_number() внутри суммы....
...
Рейтинг: 0 / 0
21.01.2014, 11:50
    #38532877
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey AgafonovЗадача немного усложнилась :-(Вряд ли: 15431514

И опять 15420817
...
Рейтинг: 0 / 0
21.01.2014, 13:46
    #38533023
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
ElicAlexey AgafonovЗадача немного усложнилась :-(Вряд ли: 15431514

И опять 15420817

Да, это все мои темы, но мне нужно считать на год вперед для date1. Но есть "фиксируем" date1 и бегаем от нее и до +1 года. Но считаем только те записи, у которых эта "фиксированная" date1>=очередной пробегаемой date2
...
Рейтинг: 0 / 0
21.01.2014, 14:16
    #38533066
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey AgafonovДа, это все мои темы, но мне нужно считать на год вперед для date1.Это аналогичная задача. Если не в состоянии это понять - будь добр предоставить тестовые данные и результат.
...
Рейтинг: 0 / 0
21.01.2014, 15:00
    #38533122
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
ElicЭто аналогичная задача. Если не в состоянии это понять - будь добр предоставить тестовые данные и результат.

Да, видимо, что-то не догоняю... Сделал файлик и на нем рассмотрел 3 примера. Картинка ниже



Итак, date 2 идут последовательно, уже не случайно, как в предыдущем вопросе. Нужно рассмотреть и просуммировать только те записи, которые от рассматриваемой строки не далее, чем +3 дня (то есть рассмотреть 3 записи вперед + сама текущая, итого 4, не дальше). Но суммировать только те строки, у которых date1<=date2 рассматриваемой строки.

Например, 2 января. Смотрим + 3 записи вперед, с текущей получается 4 записи. Это 2 - 5 января. Смотрим строки с date1, которые <=2 января, такая только одна, выделена (тоже 2 января).

Другой пример, 7 января. Аналогично, смотрим 3 строки вперед, это всего 4 строки, суммируем только те, у которых date1<=7 января. Таких две, они так же выделены.

Для всех остальных строк аналогично. Уже голову сломал, как решать. Ниже селект, которым я сформировал эти строки. Там идет random, поэтому при выполнении date1 могут быть разные, date2 строго такая же.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
/* Formatted on 2014/01/21 14:32 (Formatter Plus v4.8.7) */
WITH s AS
     (
        SELECT     DATE '2012-01-01'
                   + ROUND (DBMS_RANDOM.VALUE * 10) AS date1,
                   DATE '2012-01-01' + LEVEL - 1 AS date2, 1 AS val
              FROM DUAL
        CONNECT BY LEVEL <= 20),
     ss AS
     (SELECT date1, date2, val, date2 - date1 dd
        FROM s)
SELECT   dd, date1, date2, val,
         (SELECT NVL (SUM (val), 0)
            FROM ss
           WHERE t.date2 >= ss.date1
             AND ss.date2 BETWEEN t.date2 AND t.date2 + 3) new_right
FROM     ss t
ORDER BY date2;
...
Рейтинг: 0 / 0
21.01.2014, 16:37
    #38533315
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey AgafonovДа, видимо, что-то не догоняю...Нет. Просто недостаточно доходчиво спрашиваешь. Однопроходно это не решить, IMHO.
...
Рейтинг: 0 / 0
21.01.2014, 17:10
    #38533395
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
ElicAlexey AgafonovДа, видимо, что-то не догоняю...Нет. Просто недостаточно доходчиво спрашиваешь. Однопроходно это не решить, IMHO.

Коллеги предложили конструкцию model, тогда в один проход можэно. Если что-то получится, отпишусь.
...
Рейтинг: 0 / 0
21.01.2014, 21:22
    #38533707
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey AgafonovСделал файлик и на нем рассмотрел 3 примера.Если бы в скаляре было условие по одному столбцу, все бы реализовывалось элементарно через аналитику.
Код: 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.
with s
     as (select date '2012-01-01' + round(dbms_random.value * 10) as date1
               ,date '2012-01-01' + level - 1 as date2
               ,1 as val
           from dual
         connect by level <= 20)
    ,ss
     as (select date1
               ,date2
               ,val
               ,date2 - date1 dd
           from s)
    ,t
     as (select dd
               ,date1
               ,date2
               ,val
               ,(select nvl(sum(val), 0)
                   from ss
                  where t.date2 >= ss.date1 /*and ss.date2 between t.date2 and t.date2 + 3*/)
                   x1
               ,(select nvl(sum(val), 0)
                   from ss
                  where /*t.date2 >= ss.date1 and*/ ss.date2 between t.date2 and t.date2 + 3)
                   x2
           from ss t
         order by date2)
select t.*
      ,case
          when date2 > date1
          then
             sum(val)
             over (order by date1
                   range between unbounded preceding and abs(date2 - date1) following)
          else
             sum(val)
             over (order by date1
                   range between unbounded preceding and abs(date1 - date2) preceding)
       end y1
      ,sum(val) over (order by date2 range between current row and 3 following) y2
  from t

Но учитывая, что окно в аналитике необходимо и по date1 и по date2, текущая реализация Оракла не позволяет указать range по обоим их них:
analytic function that uses the RANGE keyword can use multiple sort keys in its ORDER BY clause if it specifies any of the following windows .
...
Рейтинг: 0 / 0
21.01.2014, 21:24
    #38533710
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey AgafonovКоллеги предложили конструкцию model, тогда в один проход можэно.Можно, только не взлетит по производительности. Так что разве что для баловства.
...
Рейтинг: 0 / 0
22.01.2014, 13:55
    #38534286
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Ну все, нашел ответ в один проход. Вот он, как и обещал:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH s AS
     (
        SELECT     DATE '2012-01-01'
                   + ROUND (DBMS_RANDOM.VALUE * 10) AS date1,
                   DATE '2012-01-01' + LEVEL - 1 AS date2, 1 AS val
              FROM DUAL
        CONNECT BY LEVEL <= 20),
     ss AS
     (SELECT date1, date2, val, date2 - date1 dd
        FROM s)
SELECT *
  FROM ss
model
dimension by (DATE2, DATE1, DATE2 DT)
measures (0 rez, val)
rules (rez[any, any, any]=sum(val)[any,cv(date2)>=date1,dt between cv(date2) and cv(date2)+3])
order by date2
...
Рейтинг: 0 / 0
22.01.2014, 14:00
    #38534292
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Добавлю, что в втащил это в рабочий селект, на ~200 000 строчек отрабатывает за 14 минут, при этом часть ресурсов уходит на склеивание порядка 10-ти таблиц - именно оттуда я получаю потом результаты через MODEL.
...
Рейтинг: 0 / 0
22.01.2014, 15:51
    #38534514
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey Agafonov,

В модели третье измерение лишнее.
При указании порядка, будет работать быстрее.
Ну и напоследок сравни производительность модели с merge join. :)
...
Рейтинг: 0 / 0
22.01.2014, 16:09
    #38534547
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
dbms_photoshop,

Если убираю 3-е измерене, не работает, пишет "ORA-32625: недопустимое измерение в предикате ссылки на ячейку". Вот скрипт:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH s AS
     (
        SELECT     DATE '2012-01-01'
                   + ROUND (DBMS_RANDOM.VALUE * 10) AS date1,
                   DATE '2012-01-01' + LEVEL - 1 AS date2, 1 AS val
              FROM DUAL
        CONNECT BY LEVEL <= 20),
     ss AS
     (SELECT date1, date2, val, date2 - date1 dd
        FROM s)
SELECT *
  FROM ss
model
dimension by (DATE2, DATE1)
measures (0 rez, val)
rules (rez[any, any]=sum(val)[any,cv(date2)>=date1 and date2 between cv(date2) and cv(date2)+3])
order by date2



На счет merje join - работал на моей таблице более получаса, я срубил. Это явно больше 14 минут.
...
Рейтинг: 0 / 0
22.01.2014, 17:00
    #38534653
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey Agafonov,

Код: plsql
1.
2.
3.
4.
model
dimension by (date2, date1)
measures (0 rez, val)
rules (rez[any,any] order by date2,date1 = sum(val)[date2 between cv(date2) and cv(date2)+3,cv(date2)>=date1])
...
Рейтинг: 0 / 0
22.01.2014, 18:17
    #38534748
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
dbms_photoshop,

На малых данных твой отработал за 8 секунд против моих 17.. Интересно. Запустил по всем 200 000 обеими способами.... Жду...
...
Рейтинг: 0 / 0
22.01.2014, 19:54
    #38534862
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Почти модель...
Код: 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.
54.
55.
56.
57.
exec dbms_random.seed(111)

WITH s AS
     (
        SELECT     DATE '2012-01-01'
                   + ROUND (DBMS_RANDOM.VALUE * 10) AS date1,
                   DATE '2012-01-01' + LEVEL - 1 AS date2, 1 AS val
              FROM DUAL
        CONNECT BY LEVEL <= 20),
     ss AS
     (SELECT date1, date2, val, date2 - date1 dd
        FROM s)
SELECT *
  FROM ss
match_recognize (
   order by date2, date1
   measures 
      p1.date2          as date2,
      p1.date1          as date1,
      p1.val            as val,
      final sum(pe.val) as rez
   after match skip to next row
   pattern ((pe1|pn1) (pe2|pn2)*)
   subset 
      p1 = (pe1, pn1),
      pe = (pe1, pe2)
   define 
      pe1 as pe1.date1 <= pe1.date2,
      pn1 as pn1.date1  > pn1.date2,
      pe2 as pe2.date1 <= p1.date2 and pe2.date2 between p1.date2 and p1.date2+3,
      pn2 as pn2.date1  > p1.date2 and pn2.date2 between p1.date2 and p1.date2+3
);

DATE2      DATE1             VAL        REZ
---------- ---------- ---------- ----------
2012-01-01 2012-01-10          1            
2012-01-02 2012-01-08          1          1 
2012-01-03 2012-01-09          1          1 
2012-01-04 2012-01-02          1          1 
2012-01-05 2012-01-08          1            
2012-01-06 2012-01-08          1          2 
2012-01-07 2012-01-06          1          3 
2012-01-08 2012-01-07          1          2 
2012-01-09 2012-01-05          1          3 
2012-01-10 2012-01-11          1          3 
2012-01-11 2012-01-09          1          4 
2012-01-12 2012-01-09          1          4 
2012-01-13 2012-01-04          1          4 
2012-01-14 2012-01-08          1          4 
2012-01-15 2012-01-03          1          4 
2012-01-16 2012-01-04          1          4 
2012-01-17 2012-01-04          1          4 
2012-01-18 2012-01-03          1          3 
2012-01-19 2012-01-06          1          2 
2012-01-20 2012-01-02          1          1 

 20 rows selected 



Alexey AgafonovНа малых данных твой отработал за 8 секунд против моих 17.. Интересно.Для малых партиций модель работает адекватно, но аналитика обычно быстрее на любых объемах.
...
Рейтинг: 0 / 0
23.01.2014, 00:36
    #38535061
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
если диапазон небольшой - 3 дня как в вопросе, то можно просто разложить по дельте:
Код: 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.
WITH s AS
     (  SELECT --+ materialize
                 DATE '2012-01-01'
                   + ROUND (DBMS_RANDOM.VALUE * 10) AS date1,
                   DATE '2012-01-01' + LEVEL - 1 AS date2, 1 AS val
              FROM DUAL
        CONNECT BY LEVEL <= 20
     )
    ,s1 as (
        select s.*
              ,least(trunc(date2-date1),3)  dx
        from s
    )
    ,s2 as (
        select s1.*
               ,sum(decode(dx,0,val)            ) over(order by date2 range between current row  and 0 following) d0
               ,sum(decode(dx,1,val,2,val,3,val)) over(order by date2 range between 1 following  and 1 following) d1
               ,sum(decode(dx,      2,val,3,val)) over(order by date2 range between 2 following  and 2 following) d2
               ,sum(decode(dx,            3,val)) over(order by date2 range between 3 following  and 3 following) d3
        from s1
    )
select s2.*
      ,nvl(d0,0)+nvl(d1,0)+nvl(d2,0)+nvl(d3,0) res
from s2
order by date2, date1;


Но на очень больших объемах эффективнее будет с PL/SQL однократным проходом по курсору с сохранением и суммированием только последних удовлетворяющих записей, а те которые ушли за три дня удалять из коллекции и пайпать
...
Рейтинг: 0 / 0
23.01.2014, 03:58
    #38535103
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
xtenderесли диапазон небольшой - 3 дня как в вопросе, то можно просто разложить по дельтеЕсли уж говорить про упрощенные варианты, то во-первых работает неправильно, во-вторых лучше избегать "хитрых окон" т.к. они портят производительность .
Код: 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.
54.
55.
56.
57.
58.
SQL> exec dbms_random.seed(0)

PL/SQL procedure successfully completed.

SQL>
SQL> with s as
  2   (select --+ materialize
  3     date '2012-01-01' + round(dbms_random.value * 10) as date1,
  4     date '2012-01-01' + level - 1 as date2,
  5     1    as val
  6      from dual
  7    connect by level <= 20),
  8  s1 as
  9   (select s.*, least(trunc(date2 - date1), 3) dx from s),
 10  s2 as
 11   (select s1.*,
 12           sum(decode(dx, 0, val)) over(order by date2 range between current row and 0 following) d0,
 13           sum(decode(dx, 1, val, 2, val, 3, val)) over(order by date2 range between 1 following and 1 following) d1,
 14           sum(decode(dx, 2, val, 3, val)) over(order by date2 range between 2 following and 2 following) d2,
 15           sum(decode(dx, 3, val)) over(order by date2 range between 3 following and 3 following) d3
 16      from s1)
 17  select s2.*,
 18         nvl(d0, 0) + nvl(d1, 0) + nvl(d2, 0) + nvl(d3, 0) res,
 19         (select nvl(sum(val), 0)
 20            from s ss
 21           where s2.date2 >= ss.date1
 22             and ss.date2 between s2.date2 and s2.date2 + 3) new_right,
 23         case when lead(date1,3) over (order by date2) <= date2 then lead(val,3) over (order by date2) else 0 end +
 24         case when lead(date1,2) over (order by date2) <= date2 then lead(val,2) over (order by date2) else 0 end +
 25         case when lead(date1,1) over (order by date2) <= date2 then lead(val,1) over (order by date2) else 0 end +
 26         case when date1 <= date2 then val else 0 end x
 27    from s2
 28   order by date2, date1;

DATE1     DATE2            VAL         DX         D0         D1         D2         D3        RES  NEW_RIGHT          X
--------- --------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
02-JAN-12 01-JAN-12          1         -1                                                      0       0             0
09-JAN-12 02-JAN-12          1         -7                                                      0       0             0
03-JAN-12 03-JAN-12          1          0          1          1                     1          3       3             3
03-JAN-12 04-JAN-12          1          1                                1                     1       2             2
05-JAN-12 05-JAN-12          1          0          1          1                                2       2             2
02-JAN-12 06-JAN-12          1          3                     1                                1       2             2
06-JAN-12 07-JAN-12          1          1                                                      0       1             1
11-JAN-12 08-JAN-12          1         -3                                           1          1       1             1
10-JAN-12 09-JAN-12          1         -1                     1          1          1          3       3             3
09-JAN-12 10-JAN-12          1          1                     1          1          1          3       4             4
06-JAN-12 11-JAN-12          1          3                     1          1          1          3       4             4
04-JAN-12 12-JAN-12          1          3                     1          1          1          3       4             4
06-JAN-12 13-JAN-12          1          3                     1          1          1          3       4             4
09-JAN-12 14-JAN-12          1          3                     1          1          1          3       4             4
09-JAN-12 15-JAN-12          1          3                     1          1          1          3       4             4
06-JAN-12 16-JAN-12          1          3                     1          1          1          3       4             4
04-JAN-12 17-JAN-12          1          3                     1          1          1          3       4             4
03-JAN-12 18-JAN-12          1          3                     1          1                     2       3             3
10-JAN-12 19-JAN-12          1          3                     1                                1       2             2
03-JAN-12 20-JAN-12          1          3                                                      0       1             1

20 rows selected.

...
Рейтинг: 0 / 0
23.01.2014, 08:08
    #38535139
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
dbms_photoshopто во-первых работает неправильнона самом деле всего лишь невнимательность - просто забыл подправить первый декод:
вместо
Код: plsql
1.
2.
3.
4.
               ,sum(decode(dx,0,val)            ) over(order by date2 range between current row  and 0 following) d0
               ,sum(decode(dx,1,val,2,val,3,val)) over(order by date2 range between 1 following  and 1 following) d1
               ,sum(decode(dx,      2,val,3,val)) over(order by date2 range between 2 following  and 2 following) d2
               ,sum(decode(dx,            3,val)) over(order by date2 range between 3 following  and 3 following) d3


должно быть
Код: plsql
1.
2.
3.
4.
5.
               
               ,sum(decode(dx,0,val,1,val,2,val,3,val)) over(order by date2 range between current row  and 0 following) d0
               ,sum(decode(dx,      1,val,2,val,3,val)) over(order by date2 range between 1 following  and 1 following) d1
               ,sum(decode(dx,            2,val,3,val)) over(order by date2 range between 2 following  and 2 following) d2
               ,sum(decode(dx,                  3,val)) over(order by date2 range between 3 following  and 3 following) d3


dbms_photoshopво-вторых лучше избегать "хитрых окон" т.к. они портят производительность .а про это можешь мне можешь даже не говорить...
...
Рейтинг: 0 / 0
23.01.2014, 08:09
    #38535141
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
dbms_photoshop
Код: plsql
1.
lead(date1,3) over (order by date2)

а я отталкивался от неуникальных date2
...
Рейтинг: 0 / 0
23.01.2014, 08:16
    #38535144
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
ну с дырками, конечно..
...
Рейтинг: 0 / 0
23.01.2014, 10:48
    #38535282
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey Agafonovdbms_photoshop,

На малых данных твой отработал за 8 секунд против моих 17.. Интересно. Запустил по всем 200 000 обеими способами.... Жду...

Да, разложить на decode и взять 4 дня просто и быстро. Но, как и писал, я свел задачу к простейшей. Мой рабочий набор данных - это селект из порядка 10-ти таблиц, ~200 000 строк, есть ключ партиционирования и смотреть надо на год вперед. Поэтому MODEL вижу, как единственный вариант, чтобы не прибешать к PL/SQL.

Итак, запустил на ночь оба варианта (с order by и второй без, с дополнительным измерением). Скрипт усложнился, поэтому работал примерно 20 минут.
...
Рейтинг: 0 / 0
23.01.2014, 10:51
    #38535288
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
[1]: Statement processed in 1214,03 sec; see Spool tab - это с order by
[1]: Statement processed in 1316,53 sec; see Spool tab - это без.. Разница в 100 секунд. Формально, dbms_photoshop прав - работает бысрее и это логично (минус одно измерение как минимум прибавляет производительность), но не сильно. Тем не менее оставля. вариант с order by. Мои благодарности к dbms_photoshop!
...
Рейтинг: 0 / 0
23.01.2014, 11:41
    #38535358
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
Alexey Agafonov~200 000 строктю... на таком объеме хоть аналитикой, хоть подзапросами должно за минутку-две отработать, только материализовать может быть надо будет
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.02.2020, 20:17
    #39929169
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще вопрос по аналитике
-2-
Почти модель...
Креативненько.

Альтернатива покороче если вдруг кому интересно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
match_recognize
(
   order by date2
   measures 
      first(date2) as date2,
      first(date1) as date1,
      first(val) as val,
      sum(x.val) rez
   after match skip to next row
   pattern ((x|y)+)
   define 
      x as date2 between first(date2) and first(date2)+3 and date1 <= first(date2),
      y as date2 between first(date2) and first(date2)+3
)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Еще вопрос по аналитике / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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