|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Добрый день. Есть таблица: Код: plsql 1. 2. 3. 4. 5.
Есть данные: Код: 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Мне нужно определить последнюю дату просрочки, используя оконные функции OVER(подсказка, lag,lead,max). Необходимо вывести id_account и последнюю дату просрочки. В поле val_rst_nat есть значения как 0 - это погаил задолженность, и есть значения с +, это нет долгов, есть значения с -, это задолженность, вот тут надо найти когда он в последний раз вышел на просрочку(дата). Пишу так: Код: plsql 1. 2. 3.
Но дата выходит не верная. У меня выходит: 1000221980318 19.03.2014 Но должна выйти: 1000221980318 18.08.2017 Где я не правильно делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 08:46 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Вот сам файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 08:50 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Так же пробую другим способом, но где то я не могу додуматься: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:11 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuidВ поле val_rst_nat есть значения как 0 - это погаил задолженность, и есть значения с +, это нет долгов, есть значения с -, это задолженность, вот тут надо найти когда он в последний раз вышел на просрочку(дата). Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:30 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5.
Вернул: 1000221980318 23.01.15 Фактически должно быть: 1000221980318 18.08.17 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:39 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuid Но должна выйти: 1000221980318 18.08.2017 Где я не правильно делаю? Где 18.08.2017 в тестовых данных? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:47 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
В файле create_insert_table.sql только один клиент с ID = 1000221980318, 19.05.17 он вышел по нулям (= 0), но 18.08.17 он последний раз перед выходом по нулям без долгов, задолжал - 65 000. После 18.08.17 он много раз задолжал, но задача в том, чтобы запрос вытащил именно последний долг перед тем, как вышел по нулям. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:51 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuid, ну так сформулируйте задачу максимально прозрачно. а) надо поймать факты перехода через 0 в минус б) выбрать последний переход как-то так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:54 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Если набрать запрос: Код: plsql 1.
То можно увидеть, что после 18.08.2017 он ни разу по нулям не выходил, а все время в долгах был. Т.к запрос выше ничего не возвращает. Вот пытаюсь используя аналитические функции LEAD, LAG (как дано в задаче) вытащить эту дату и ID клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:54 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
Код: 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.
Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:58 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
delphinotes, Спасибо, ваш запрос вернул последнюю дату, когда клиент вышел по нулям, т.е 19.05.2017, пытаюсь изменить на следующую дату, т.е после 19.05.2017 сразу идет 18.08.2017: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вместо LAG использовал LEAD и поставил 1, но запрос возвращает 19.05.2017 вместо следующей даты 18.08.2017, хотя поставил 1, чтобы переключился на след.запись. Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 09:59 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuid, Прошу прощения, я исправил запрос видимо после того, как вы его скопировали. Проверьте его ещё раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 10:01 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuid, Т.е. смысл в том, чтобы при отображении текущей строки (cur_val) показать значение из предыдущей (prev_val), и если текущая в минусе, а предыдущая в плюсе - то текущая и есть факт перехода через 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 10:04 |
|
Аналитические функции OVER, LEAD, LAG
|
|||
---|---|---|---|
#18+
LiQuid, данные представте с помощью with и что надо получить варианты расписать для разных ID_ACCOUNT Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2021, 10:08 |
|
|
start [/forum/topic.php?fid=52&msg=40054825&tid=1880358]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
131ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 477ms |
0 / 0 |