|
Oracle Sql
|
|||
---|---|---|---|
#18+
Всем привет. У меня есть код, где 'D' и 'S' статус отказанных и аппрувнутых соответственно заявок в банке. Помимо них, есть еще и другие статусы как 'H','F','K' и так далее. В моем коде я вытащил количество уникальных клиентов в разрезе 6 месяцев. Уникальный подразумевает:клиенты которые имели несколько кредитов(например 2 отказанных кредита и 3 аппрувнутых). Получается я вытащил количество таких клиентов в разрезе 6 месяцев. Мне теперь нужно в разрезе этих 6 месяцев вытащить количество первых кредитов. Например за 6 месяцев у клиента есть 12 по 2 кредита за один месяц, первый кредит аппрувнутый и второй отказанный. Мне нужно вытащить просто первый кредит в не зависимости от статуса кредита. И посчитать общее количество первых кредитов в разрезе 6 месяцев, используя эти данные select p.Name_credit_status, trunc(t.dtime_Decision,'mm'),count(distinct t.skp_client) from owner_dwh.dc_Credit_case t join owner_dwh.cl_credit_status p ON t.skp_credit_status=p.SKP_CREDIT_STATUS where p.code_credit_status in ('D', 'S') and dtime_decision>add_months(sysdate,-6) Group by p.name_credit_status,trunc(t.dtime_decision,'mm) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:37 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
У нас нет ваших таблиц. Предоставьте входные данные в виде with, желаемый результат. Пользуйтесь тегами для удобства чтения. Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 12:55 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
dmdmdmУ нас нет ваших таблиц. Не вводите в заблуждение, есть у нас его таблицы. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 13:11 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, в каком случае к-во первых кредитов в разрезе 6 месяцев не совпадет с count(distinct t.skp_client)? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2019, 16:12 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, нет такого случая. Просто в разрезе 6 месяцев он должен посчитать количество первых кредитов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 06:35 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, Входные данные Name_Credit_status (статус кредита)-approved,rejected и так далее Date_decision (дата согласования кредита) skp_client (id клиента). Таблицы : owner_dwh.dc_credit_case owner_dwh.cl_credit_status (Где хранится Name_credit_status)-справочник. Нужно взять количество первых кредитов по месяцам за последние пол года уникальных клиентов. Уникальные клиенты подразумевают, клиенты у которых несколько кредитов (с разными статусами). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 07:18 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMikaStax, нет такого случая. Просто в разрезе 6 месяцев он должен посчитать количество первых кредитов. ничего не понял к-во первых кредитов, равно к-ву клиентов приведите пример напр с тремя клиентамы ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 08:33 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, Добрый день. Мой код показывает количество всех клиентов со статусами 'D','S','A', 'T', 'K', 'P', 'R', 'L', 'N', 'H', 'Q' и так далее в разрезе полу года по месяцам. Мне нужно вытащить количество клиентов с первыми кредитами за месяц в разрезе полу года. Смотрите: У одного клиента за первый месяц 3 кредита с разными статусами, мне нужно за этот месяц вытащить только первый кредит(вне зависимости от его статуса). Продолжим: за второй месяц у него 5 кредитов, также со второго месяца нужно вытащить первый кредит. И так нужно посчитать в разрезе полу года. Надо учесть, то что надо только первый кредит с каждого месяца и сгруппировать по месяцам в разрезе 6 месяца. авторselect p.NAME_CREDIT_STATUS, to_char(t.dtime_decision,'Mon') as mon,extract(year from t.dtime_decision) as yyyy,count(distinct t.skp_client) from OWNER_DWH.DC_CREDIT_CASE t join owner_dwh.cl_credit_status p ON t.SKP_CREDIT_STATUS=p.SKP_CREDIT_STATUS where p.Code_credit_status in ('D','S','A', 'T', 'K', 'P', 'R', 'L', 'N', 'H', 'Q') and dtime_decision>add_months(sysdate,-6) GROUP BY p.NAME_CREDIT_STATUS, to_char(t.dtime_decision,'Mon'),extract(year from t.dtime_decision) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 08:50 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, В разбивке по статусам, может быть разное кол-во клиентов. Код: plsql 1. 2.
Его запрос вернёт 2 статуса и каунт = 1 для каждой строки. А ему надо вернуть 1ый статус. В таком случае и дистинкт не нужен. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 08:58 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Dshedoo, Я думал использовать keep(dense_Rank first order by). Но я не знаю по чему отсортировать и как можно использовать его в моей задаче. Мне просто нужно в каждом месяце вытащить первое значение кредита(вне зависимости от статуса), а вы привели только в двух статусах. И после того как вытащу первые значения с каждого месяца и посчитать общее количество первых кредитов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:03 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
DshedooВ таком случае и дистинкт не нужен.В таком случае и подзапрос exists излишество. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:04 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
-2-, Но ему же надо исключить остальные записи. Так что либо экзистом, либо дистинкт + фёрст валуе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:06 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMikaStax, Добрый день. Мой код показывает количество всех клиентов со статусами 'D','S','A', 'T', 'K', 'P', 'R', 'L', 'N', 'H', 'Q' и так далее в разрезе полу года по месяцам. Мне нужно вытащить количество клиентов с первыми кредитами за месяц в разрезе полу года. Смотрите: У одного клиента за первый месяц 3 кредита с разными статусами, мне нужно за этот месяц вытащить только первый кредит(вне зависимости от его статуса). Продолжим: за второй месяц у него 5 кредитов, также со второго месяца нужно вытащить первый кредит. И так нужно посчитать в разрезе полу года. Надо учесть, то что надо только первый кредит с каждого месяца и сгруппировать по месяцам в разрезе 6 месяца. авторselect p.NAME_CREDIT_STATUS, to_char(t.dtime_decision,'Mon') as mon,extract(year from t.dtime_decision) as yyyy,count(distinct t.skp_client) from OWNER_DWH.DC_CREDIT_CASE t join owner_dwh.cl_credit_status p ON t.SKP_CREDIT_STATUS=p.SKP_CREDIT_STATUS where p.Code_credit_status in ('D','S','A', 'T', 'K', 'P', 'R', 'L', 'N', 'H', 'Q') and dtime_decision>add_months(sysdate,-6) GROUP BY p.NAME_CREDIT_STATUS, to_char(t.dtime_decision,'Mon'),extract(year from t.dtime_decision) Смотрите: каждый клиент имеет первый кредит, поетому к-во первых кредитов == к-ву клиентов если для к-ва клиентов и к-ва первых кредитов надо учитывать разные статусы то перенести списки из where в count .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:16 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
DshedooStax, В разбивке по статусам, может быть разное кол-во клиентов. аааа понял, он группирует по статусах авторВ моем коде я вытащил количество уникальных клиентов в разрезе 6 месяцев утверждение неверно ведь вытащил в разрезе стутуса и месяца я код невнімательно глянул ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:23 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, Первые кредиты уникальных клиентов. Под уникальностью подразумевается клиенты у которых несколько кредитов. Например клиент имеет 10 кредитов в одном банке, но при этом в разное время месяца. И мне нужно вытащить только первые кредиты в моем заданном отрезке времени. Если 5 месяцев, и в каждом месяце по 2 кредита. То в output должно выйти 5. Потому что берет первые значения с каждого месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:31 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, что получить на етих данных? Код: 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.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:46 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, Не совсем так. В output-е должны быть: Credit status Time Count of first credit by unique client - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . И там должны быть огромные числа, потому что когда прибавить количество первых клиентов, там точно 1 и 2 значения не выйдут. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 09:58 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, на вот етих данных что в результате получить первый клиэнт имеет шесь кредитов 1 D 01.07.19 1 S 17.07.19 1 K 27.07.19 1 K 01.08.19 1 S 02.08.19 1 D 03.08.19 второй клиент имеет четыре кредита 2 D 15.07.19 2 S 25.07.19 2 S 04.08.19 2 S 05.08.19 третий и четвертый клиент имеют один 3 M 01.08.19 4 M 01.09.19 результат? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:05 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, Смотрите. У вас в первом клиенте есть 6 кредитов. Но теперь обратите внимание на месяцы, первое 01.07 второе 17.07 третее 27.07. Как видите в одном месяце 3 кредита, но нужно взять только первый от даты 01.07. На втором месяце у этого же клиента есть также 3 кредита от даты 01/02/03.08 но нужно вывести кредит только первый от 01.08. Получается с месяца 07 выходит 1 кредит с месяца 08 выходит также 1 кредит.output:1+1=2.И так по каждому месяцу нужно посчитать в разрезе 6 месяцев. Потом прибавить все первые кредиты для каждого клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:17 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMikaStax, Смотрите. в результате получить табличку/число (нарисуйте) ? ps Ваш селект не соответствует "В моем коде я вытащил количество уникальных клиентов в разрезе 6 месяцев" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:22 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, Status Date Count(кол-во первых кредитов для каждого клиента) Статус кредита Дата по месяцам(не по дням) Числовые значения Входные данные-Name_credit_status (название статуса такие как Approved,Rejected и так далее) SKP_CLient (Id client) Code_credit_status (код статуса такие как 'D' 'R' 'P'). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:32 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, посчітайте вручную для моих данных пока считаете Код: 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.
какое еще к-во надо? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:37 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
Stax, За основу возьмите мой код. Его нужно просто доработать. Попытаюсь объяснить более понятнее. В одном месяце есть 1000 клиентов и 2000 заявок. Если у каждого клиента по 2 кредита(условно). В этом коде по моему примеру выйдет output=2000. А я хочу, чтобы в output=1000, но разбить по статусам reject=400 approved=600. Потому что должно считаться только первые кредиты, а остальные не берутся в счет. Соответственно количество первых кредитов = количество клиентов. Код нужно доработать и использовать keep dense_Rank first или что то такое. select p.Name_credit_status, trunc(t.dtime_Decision,'mm'),count(distinct t.skp_client) from owner_dwh.dc_Credit_case t join owner_dwh.cl_credit_status p ON t.skp_credit_status=p.SKP_CREDIT_STATUS where p.code_credit_status in ('D', 'S') and dtime_decision>add_months(sysdate,-6) Group by p.name_credit_status,trunc(t.dtime_Decision,'mm') ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 10:55 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMikaStax, За основу возьмите мой код. отвлечемся от тысяч, посчитать вручну сложно и долга у нас всего 4 клієнта 12 кредитов 3 месяца 4 статуса вот аналог Вашего селекта Код: 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.
дорисуйте недостающие колонки с "Числовыми значениями" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:22 |
|
Oracle Sql
|
|||
---|---|---|---|
#18+
AckermanMika, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2019, 11:24 |
|
|
start [/forum/topic.php?fid=52&msg=39857758&tid=1882123]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 153ms |
0 / 0 |