powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что такое KEEP?
25 сообщений из 25, страница 1 из 1
Что такое KEEP?
    #34841297
Natawa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извените пожалуйста, я вас наверное уже достала, но мне опять нужна ваша помощь
Что является результатом выполнения данного запроса

select
lp.customer_id
,lp.last_name
,lp.first_name
,lp.middle_name
,max(lp.application_type) KEEP (DENSE_RANK LAST ORDER BY (lp.date_ins)) as application_type
,max(lp.credit_amount) as credit_amount

from
LP_table lp
group by
lp.customer_id
,lp.last_name
,lp.first_name
,lp.middle_name

Комментарии к данным: date_ins – дата отправки предложения

И вообще как понять вот это : max(lp.application_type) KEEP (DENSE_RANK LAST ORDER BY (lp.date_ins)) as application_type
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841315
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Natawa
И вообще как понять вот это : max(lp.application_type) KEEP (DENSE_RANK LAST ORDER BY (lp.date_ins)) as application_type

Он показывает значение поля application_type для самой поздней даты date_ins.

Агрегация по полю application_type синтаксически необходима.

А почитать здесь FIRST (LAST)
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841327
Дубовая голова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Девушка, вы умеете поиском пользоваться, или маникюр мешает ?
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841336
Дубовая голова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmidekА почитать здесь FIRST (LAST)

Напоминаю Вам, что персонаж не разумiет аглицку мову
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841349
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дубовая голова dmidekА почитать здесь FIRST (LAST)

Напоминаю Вам, что персонаж не разумiет аглицку мову

Может, если прижмет , разберется

Пушкин Борис Годунов
В а р л а а м (вырывая бумагу).
Отстаньте, сукины дети! что я за Гришка? – как! 50 лет, борода седая, брюхо толстое! нет, брат! молод еще надо мною шутки шутить. Я давно не читывал и худо разбираю, а тут уж разберу,как дело до петли доходит
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841362
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то последнее время стало модно регистрироваться с женскими никами, чтоб задавать халявные вопросы
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841365
Дубовая голова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmidek...
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841369
Дубовая голова
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАчто-то последнее время стало модно регистрироваться с женскими никами, чтоб задавать халявные вопросы

Так мужика в пыль растопчут, а Блондинкам все простительно
...
Рейтинг: 0 / 0
Что такое KEEP?
    #34841414
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дубовая головаТак мужика в пыль растопчут, а Блондинкам все простительно
эт точно
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Что такое KEEP?
    #39335683
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Для нахождения значения поля (STATUS) для макситмальной даты (DATE_ADDED) с группировкой по (PAYMENT_ID)
использую функцию
Код: plsql
1.
MAX (STATUS) KEEP (DENSE_RANK LAST ORDER BY (DATE_ADDED)) OVER (PARTITION BY PAYMENT_ID)


Подскажите, плиз, как ограничить конкретным значением (например, TO_DATE ('01.09.2016', 'dd.mm.yyyy')) диапазон дат среди которых будет искаться максимальная.
Читал про RANGE BETWEEN analiticheskie-funkcii , не могу понять, как его использовать.
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335688
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startup,

Ты для начала реши для себя - тебе нужна аналитика или группировка.
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335694
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или в where, или в окне partition, или как-то так:
Код: plsql
1.
MAX(STATUS) KEEP (DENSE_RANK LAST ORDER BY (>>CASE WHEN DATE_ADDED BETWEEN ... AND ... THEN DATE_ADDED ELSE NULL END<<<)) OVER (PARTITION BY PAYMENT_ID)


?
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335696
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стар тупс группировкой по (PAYMENT_ID)группировка это group by, а не partition by. Анальный first/last дело достаточно маргинальное.
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335698
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupДобрый день.
Для нахождения значения поля (STATUS) для макситмальной даты (DATE_ADDED) с группировкой по (PAYMENT_ID)
использую функцию
Код: plsql
1.
MAX (STATUS) KEEP (DENSE_RANK LAST ORDER BY (DATE_ADDED)) OVER (PARTITION BY PAYMENT_ID)


Подскажите, плиз, как ограничить конкретным значением (например, TO_DATE ('01.09.2016', 'dd.mm.yyyy')) диапазон дат среди которых будет искаться максимальная.
Дописать в where
Код: plsql
1.
and DATE_ADDED >= TO_DATE ('01.09.2016', 'dd.mm.yyyy')
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335699
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a keep и over partition вместе работают? )
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335703
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotgea keep и over partition вместе работают? )
Оказалось, работают. Никогда не приходилось, спасибо за вопрос )
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335753
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-группировка это group by, а не partition by
я имел ввиду, что в данной функции я использую PARTITON BY для группировки

andrey_anonymousДописать в where
Код: plsql
1.
and DATE_ADDED >= TO_DATE ('01.09.2016', 'dd.mm.yyyy')


в where я уже использую DATE_ADDED по другой дате
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335776
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startup,

Судя по тому, что я понял из вашего описания, я бы использовал именно то что вам подсказал andrey_anonymous. Но если это вас не устраивает, то покажите пример ваших данных, ваш запрос и результат который вы хотите получить - тогда может моя каша в голове немного прояснится...

Regards

Maxim
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335801
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupя имел ввиду, что в данной функции я использую PARTITON BY для группировки


Термин группировкa подрзумевaет агрегацию - возврат одной строки на группу. PARTITION BY это деление на группы а не группировкa.

SY.
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39335840
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startup,

Код: 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 t as
(
select 1 status, date '2016-01-01' date_added, 1 payment_id from dual
union all select 2 status, date '2016-08-01' date_added, 1 payment_id from dual
union all select 3 status, date '2016-09-01' date_added, 1 payment_id from dual
union all select 4 status, date '2016-07-01' date_added, 1 payment_id from dual
union all select 5 status, date '2016-06-01' date_added, 1 payment_id from dual
union all select 0 status, date '2017-01-01' date_added, 1 payment_id from dual
)
select
 t.*,
 max(status) keep (dense_rank last order by (date_added)) over (partition by payment_id) m1,
 max(status) keep (dense_rank last order by case when date_added < date '2016-09-01' + 1 then date_added end nulls first)
 over(partition by payment_id) m2
from t
order by status;

    STATUS DATE_ADD PAYMENT_ID         M1         M2
---------- -------- ---------- ---------- ----------
         0 01.01.17          1          0          3
         1 01.01.16          1          0          3
         2 01.08.16          1          0          3
         3 01.09.16          1          0          3
         4 01.07.16          1          0          3
         5 01.06.16          1          0          3
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39336752
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,
Avotge

Большой thanks!
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39337929
startup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

Код: 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.
with t as
(
select 1 status, date '2016-01-01' date_added, 1 payment_id from dual
union all select 2 status, date '2016-08-01' date_added, 1 payment_id from dual
union all select 3 status, date '2016-09-01' date_added, 1 payment_id from dual
union all select 4 status, date '2016-07-01' date_added, 1 payment_id from dual
union all select 5 status, date '2016-06-01' date_added, 1 payment_id from dual
union all select 0 status, date '2017-01-01' date_added, 1 payment_id from dual
)
select
 t.*,
 max(status) keep (dense_rank last order by (date_added)) over (partition by payment_id) m1,
 max(status) keep (dense_rank last order by case when date_added < date '2016-09-01' + 1 then date_added end nulls first)
 over(partition by payment_id) m2,
 max(status) keep (dense_rank last order by case when date_added < date '2015-09-01' + 1 then date_added  end nulls first)
 over(partition by payment_id) m3,
  max(status) keep (dense_rank last order by case when date_added < date '2015-09-01' + 1 then date_added  else null end nulls first)
 over(partition by payment_id) m4
 
from t
order by status;

    STATUS DATE_ADD PAYMENT_ID         M1         M2         M3         M4
---------- -------- ---------- ---------- ---------- ---------- ----------
         0 01.01.17          1          0          3         5         5
         1 01.01.16          1          0          3         5         5
         2 01.08.16          1          0          3         5         5
         3 01.09.16          1          0          3         5         5
         4 01.07.16          1          0          3         5         5
         5 01.06.16          1          0          3         5         5



Получается, если я ограничиваю date_added датой date '2015-09-01' меньше минимальной даты date '2016-06-01', то функция возвращает статус, соответсвующий минимальной дате.
А можно в этом случае как-то возвращать NULL?
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39337987
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupПолучается, если я ограничиваю date_added датой date '2015-09-01' меньше минимальной даты date '2016-06-01', то функция возвращает статус, соответсвующий минимальной дате.
А можно в этом случае как-то возвращать NULL?

Код: plsql
1.
dense_rank last order by case when date_added < date '2015-09-01' + 1 then date_added  else null end nulls first



Ну и где тут "соответсвующий минимальной дате"?

SY.
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39338062
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
startupПолучается, если я ограничиваю date_added датой date '2015-09-01' меньше минимальной даты date '2016-06-01', то функция возвращает статус, соответсвующий минимальной дате.
А можно в этом случае как-то возвращать NULL?Ну очевидно тебе стоит применять логику только если есть хоть одна дата, удовлетворяющая условию.

Код: plaintext
1.
2.
3.
 case when min(date_added) over (partition by payment_id) < date '2015-09-01' + 1 then
 max(status) keep (dense_rank last order by case when date_added < date '2015-09-01' + 1 then date_added  end nulls first)
 over(partition by payment_id)
 end m4
...
Рейтинг: 0 / 0
Что такое KEEP?
    #39338087
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как альтернатива - применить case к status, чтоб не вычислять еще одну функцию.

Код: plaintext
max(case when date_added < date '2015-09-01' + 1 then status end)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что такое KEEP?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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