Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Список изменений. / 17 сообщений из 17, страница 1 из 1
02.11.2017, 18:18
    #39546923
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Добрый день!
Подскажите, как получить список изменений.
Например, есть таблица значение|дата
В ней значения :
1|t1
2|t2
2|t3
1|t4
4|t5
2|t6
4|t7
5|t8

Запрос должен вывести:1,2,1,4,2,4,5
...
Рейтинг: 0 / 0
02.11.2017, 18:22
    #39546927
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
STFF start_of_group
...
Рейтинг: 0 / 0
02.11.2017, 18:53
    #39546944
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
iv_roman_vl,

Код: 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.
  1  with t(z,d) as (
  2  select 1,'t1' from dual union all
  3  select 2,'t2' from dual union all
  4  select 2,'t3' from dual union all
  5  select 1,'t4' from dual union all
  6  select 4,'t5' from dual union all
  7  select 2,'t6' from dual union all
  8  select 4,'t7' from dual union all
  9  select 5,'t8' from dual )
 10  ,tt as (
 11  select
 12    t.*
 13   ,lag(z,1,-z) over (order by d) la
 14  from t
 15  )
 16* select z,d from tt where z<>la order by d
SQL> /

         Z D
---------- --
         1 t1
         2 t2
         1 t4
         4 t5
         2 t6
         4 t7
         5 t8

7 rows selected.



....
stax
...
Рейтинг: 0 / 0
03.11.2017, 09:07
    #39547156
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,

Спасибо!!! Работает.
А вот если столбец не числовой, а строчный?
...
Рейтинг: 0 / 0
03.11.2017, 09:21
    #39547163
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
iv_roman_vl,

Который из них? И что мешает проверить?
...
Рейтинг: 0 / 0
03.11.2017, 09:48
    #39547175
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,
Код: 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.
  1  with t(z,d) as (
  2    select 'a','t1' from dual union all
  3    select 'b','t2' from dual union all
  4    select 'b','t3' from dual union all
  5    select 'b','t4' from dual union all
  6    select 'c','t5' from dual union all
  7    select 'a','t6' from dual union all
  8    select 'a','t7' from dual union all
  9    select 'b','t8' from dual )
 10    ,tt as (
 11    select
 12      t.*
 13     ,lag(z,1,z||'*') over (order by d) la
 14    from t
 15    )
 16* select z,d from tt where z<>la order by d
SQL> /

Z D
- --
a t1
b t2
c t5
a t6
b t8



......
stax
...
Рейтинг: 0 / 0
03.11.2017, 09:48
    #39547176
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
env,

первый столбец
...
Рейтинг: 0 / 0
03.11.2017, 09:59
    #39547184
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,

Отлично!!! Спасибо!!!
И ,надеюсь, последний вопрос)
Если в первой строке встречается null, то запрос не верны. Возвращает не правильно.
...
Рейтинг: 0 / 0
03.11.2017, 10:37
    #39547219
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
iv_roman_vl,

не тестировал

Код: 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.
  1  with t(z,d) as (
  2    select '','t1' from dual union all
  3    select '','t2' from dual union all
  4    select 'c','t3' from dual union all
  5    select '','t4' from dual union all
  6    select 'c','t5' from dual union all
  7    select 'a','t6' from dual union all
  8    select 'a','t7' from dual union all
  9    select '','t8' from dual )
 10    ,tt as (
 11    select
 12      t.*
 13     ,lag(z,1,z||'*') over (order by d) la
 14    from t
 15    )
 16  select z,d
 17   from tt
 18* where (z is not null and z<>nvl(la,z||'*')) or (z is null and la is not null) order by d
SQL> /

Z D
- --
  t1
c t3
  t4
c t5
a t6
  t8

6 rows selected.



ps
если известно недопустимое значение (напр ~) то проще
nvl(z,'~') ...

.....
stax
...
Рейтинг: 0 / 0
03.11.2017, 10:44
    #39547224
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,

Спасибо, огромное. А то не было времени разбираться в тонкостях with и lag.
Спасибо!!!
...
Рейтинг: 0 / 0
03.11.2017, 10:51
    #39547230
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
match_recognize для 12c
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with t(z,d) as (
select 1,'t1' from dual union all
select 2,'t2' from dual union all
select 2,'t3' from dual union all
select 1,'t4' from dual union all
select 4,'t5' from dual union all
select 2,'t6' from dual union all
select 4,'t7' from dual union all
select 5,'t8' from dual 
)
select 
 z,d_start,nvl(d_end,d_start) d_end
from t
MATCH_RECOGNIZE (
  order by d
  MEASURES
    STRT.z as z
   ,STRT.d as d_start
   ,last(same.d) as d_end
  pattern (strt same*)
  define
     same as same.z = prev(same.z)
)

...
Рейтинг: 0 / 0
03.11.2017, 12:08
    #39547298
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
xtender,

null?

....
stax
...
Рейтинг: 0 / 0
03.11.2017, 12:31
    #39547321
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,

Null? И что с ним не так?
...
Рейтинг: 0 / 0
03.11.2017, 12:39
    #39547329
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
Stax,

А есть какието ограничения на такой запрос?
При with (select ...)
ко всей таблице около 100 000 строк смещение между следующим и предыдущим элементом нарушается.
Толи размер влияет, толи от значений текущего или следующего элемента . Непонятно.
...
Рейтинг: 0 / 0
03.11.2017, 12:41
    #39547333
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
а, понял вроде, NULL'ы надо сворачивать тоже?
тогда и их сравнивать будем
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select 
 z,d_start,nvl(d_end,d_start) d_end
from t
MATCH_RECOGNIZE (
  order by d
  MEASURES
    STRT.z as z
   ,STRT.d as d_start
   ,last(same.d) as d_end
  pattern (strt same*)
  define
     same as decode(same.z,prev(same.z),1)=1
)

...
Рейтинг: 0 / 0
03.11.2017, 12:52
    #39547343
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
iv_roman_vl,
про with не понял

Как вывести разные значения для одинаковых значений столбцов.

Код: 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.
SQL> select * from t order by d;

Z          D
---------- ----------
null       t1
null       t2
c          t3
null       t4
c          t5
a          t6
a          t7
null       t8

8 rows selected.

SQL> ed
Wrote file afiedt.buf

  1  with
  2    tt as (
  3    select
  4      t.*
  5     ,lag(z,1,z||'*') over (order by d) la
  6    from t --Ваша таблічка на 100 000
  7    )
  8  select z,d
  9   from tt
 10* where (z is not null and z<>nvl(la,z||'*')) or (z is null and la is not null) order by d
SQL> /

Z          D
---------- ----------
null       t1
c          t3
null       t4
c          t5
a          t6
null       t8

6 rows selected.



сбиватся не должно(если я не напартичил с null)

мож у Вас сортировка (т1) более сложная, или надо партицировать

смотрите в какой момент "сбивается"

.....
stax
...
Рейтинг: 0 / 0
03.11.2017, 12:54
    #39547346
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список изменений.
xtender,

спасибо

как ето у меня decode из головы вылетело,
начал городить ...
старею

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


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