powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Уникальное значение
13 сообщений из 13, страница 1 из 1
Уникальное значение
    #39709063
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, как можно добиться уникальности в выборке БЕЗ distinct?
...
Рейтинг: 0 / 0
Уникальное значение
    #39709071
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321,

where rownum=1
...
Рейтинг: 0 / 0
Уникальное значение
    #39709125
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,
мне нужно выбрать значения из столбца (их много )
...
Рейтинг: 0 / 0
Уникальное значение
    #39709134
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321,

group by
...
Рейтинг: 0 / 0
Уникальное значение
    #39709155
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

дело в том , что эти значения привязаны к датам и если я их отгрупирую, то получится на всей выборке уникальные значения, а мне нужно только в определенном месте. Например, есть курс валют который привязан к каждому дню 2х или 3х месяцев. Т.е. за первый день 20, за второй 20, за третий 20, за 4 - 21, за 5- 21грн, мне нужно взять только 20грн и 21грн, т.е первое изменение
...
Рейтинг: 0 / 0
Уникальное значение
    #39709164
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321 за первый день 20, за второй 20, за третий 20, за 4 - 21, за 5- 21грн, мне нужно взять только 20грн и 21грн, т.е первое изменение за шестой день 20...
...
Рейтинг: 0 / 0
Уникальное значение
    #39709170
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321MaximaXXL,

дело в том , что эти значения привязаны к датам и если я их отгрупирую, то получится на всей выборке уникальные значения, а мне нужно только в определенном месте. Например, есть курс валют который привязан к каждому дню 2х или 3х месяцев. Т.е. за первый день 20, за второй 20, за третий 20, за 4 - 21, за 5- 21грн, мне нужно взять только 20грн и 21грн, т.е первое изменениеприведи человеческий пример с несколькими валютами за несколько дней в виде таблицы, и вменяемым результатом
...
Рейтинг: 0 / 0
Уникальное значение
    #39709172
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maska321дело в том , что эти значения привязаны к датам и если я их отгрупирую, то получится на всей выборке уникальные значения, а мне нужно только в определенном месте. Например, есть курс валют который привязан к каждому дню 2х или 3х месяцев. Т.е. за первый день 20, за второй 20, за третий 20, за 4 - 21, за 5- 21грн, мне нужно взять только 20грн и 21грн, т.е первое изменение
Посмотрите SQL for Pattern Matching
...
Рейтинг: 0 / 0
Уникальное значение
    #39709227
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
c
01.02.2005 20
01.03.2005 20
01.04.2005 21
01.05.2005 21
01.06.2005 20
01.08.2005 26
01.07.2005 26
...
-------------result
01.02.2005 20
01.04.2005 21
01.06.2005 20
01.08.2005 26
...
Рейтинг: 0 / 0
Уникальное значение
    #39709255
mibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maska321,
Можно примерно так...но чтобы именно как вы хотите надо из тогда пронумеровать еще, последовательность непонятно чем задана

Код: 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
  w_data as
  (
    select to_date('01.02.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
    select to_date('01.03.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
    select to_date('01.04.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
    select to_date('01.05.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
    select to_date('01.06.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
    select to_date('01.08.2005', 'dd.mm.yyyy') as dt, 26 as val from dual union all
    select to_date('01.07.2005', 'dd.mm.yyyy') as dt, 26 as val from dual
  )
select max(dt)  as dt,
       max(val) as val
  from (
          select dt,
                 val,
                 sum(flg) over (order by dt) as grp
            from (
                  select d.*,
                         case when lag(val) over (order by dt) = val then null else 1 end as flg
                    from w_data d
                 )
       )
 group by grp
 order by dt
...
Рейтинг: 0 / 0
Уникальное значение
    #39709257
mibin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maska321,
Вот результат как вы хотите, но пришлось добавить последовательность записей
with
w_data as
(
select 1 as nr, to_date('01.02.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
select 2 as nr, to_date('01.03.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
select 3 as nr, to_date('01.04.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
select 4 as nr, to_date('01.05.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
select 5 as nr, to_date('01.06.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
select 6 as nr, to_date('01.08.2005', 'dd.mm.yyyy') as dt, 26 as val from dual union all
select 7 as nr, to_date('01.07.2005', 'dd.mm.yyyy') as dt, 26 as val from dual
)
select max(dt) keep (dense_rank first order by nr) as dt,
max(val) as val
from (
select dt,
val,
nr,
sum(flg) over (order by nr) as grp
from (
select d.*,
case when lag(val) over (order by nr) = val then null else 1 end as flg
from w_data d
)
)
group by grp
order by dt
...
Рейтинг: 0 / 0
Уникальное значение
    #39709287
Maska321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mibin,
спасибо!
...
Рейтинг: 0 / 0
Уникальное значение
    #39709362
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mibinMaska321,
Можно примерно так...но чтобы именно как вы хотите надо из тогда пронумеровать еще, последовательность непонятно чем задана



імхо, все проще
Код: 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
  2    w_data as
  3    (
  4      select to_date('01.02.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
  5      select to_date('01.03.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
  6      select to_date('01.04.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
  7      select to_date('01.05.2005', 'dd.mm.yyyy') as dt, 21 as val from dual union all
  8      select to_date('01.06.2005', 'dd.mm.yyyy') as dt, 20 as val from dual union all
  9      select to_date('01.08.2005', 'dd.mm.yyyy') as dt, 26 as val from dual union all
 10      select to_date('01.07.2005', 'dd.mm.yyyy') as dt, 26 as val from dual
 11    )
 12  select dt,val from (
 13   select
 14    w.*
 15     ,lag(val,1,val+1) over (order by dt) la
 16   from w_data w)
 17*  where val<>la
SQL> /

DT              VAL
-------- ----------
01.02.05         20
01.04.05         21
01.06.05         20
01.07.05         26



зи
если надо по коду валют, то добавть partition cur

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


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