Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Что такое KEEP? / 25 сообщений из 25, страница 1 из 1
02.10.2007, 15:45
    #34841297
Natawa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Извените пожалуйста, я вас наверное уже достала, но мне опять нужна ваша помощь
Что является результатом выполнения данного запроса

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
02.10.2007, 15:48
    #34841315
dmidek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
02.10.2007, 15:50
    #34841327
Дубовая голова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Девушка, вы умеете поиском пользоваться, или маникюр мешает ?
...
Рейтинг: 0 / 0
02.10.2007, 15:51
    #34841336
Дубовая голова
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
dmidekА почитать здесь FIRST (LAST)

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

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

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

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

Так мужика в пыль растопчут, а Блондинкам все простительно
...
Рейтинг: 0 / 0
02.10.2007, 16:09
    #34841414
1
1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Дубовая головаТак мужика в пыль растопчут, а Блондинкам все простительно
эт точно
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.10.2016, 17:56
    #39335683
startup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Добрый день.
Для нахождения значения поля (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
27.10.2016, 18:01
    #39335688
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
startup,

Ты для начала реши для себя - тебе нужна аналитика или группировка.
...
Рейтинг: 0 / 0
27.10.2016, 18:03
    #39335694
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Или в 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
27.10.2016, 18:03
    #39335696
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
стар тупс группировкой по (PAYMENT_ID)группировка это group by, а не partition by. Анальный first/last дело достаточно маргинальное.
...
Рейтинг: 0 / 0
27.10.2016, 18:05
    #39335698
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
27.10.2016, 18:05
    #39335699
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
a keep и over partition вместе работают? )
...
Рейтинг: 0 / 0
27.10.2016, 18:07
    #39335703
Avotge
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Avotgea keep и over partition вместе работают? )
Оказалось, работают. Никогда не приходилось, спасибо за вопрос )
...
Рейтинг: 0 / 0
27.10.2016, 19:41
    #39335753
startup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
-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
27.10.2016, 20:31
    #39335776
Maxim Demenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
startup,

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

Regards

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


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

SY.
...
Рейтинг: 0 / 0
28.10.2016, 00:05
    #39335840
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
29.10.2016, 06:35
    #39336752
startup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
dbms_photoshop,
Avotge

Большой thanks!
...
Рейтинг: 0 / 0
31.10.2016, 14:16
    #39337929
startup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
31.10.2016, 15:00
    #39337987
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
31.10.2016, 15:53
    #39338062
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
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
31.10.2016, 16:08
    #39338087
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что такое KEEP?
Как альтернатива - применить case к status, чтоб не вычислять еще одну функцию.

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


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