|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
Задача следующая: необходимо расширить/перегрузить постгресовские аггрегируемые функции LEAD и LAG для работы с NULL значениями, чтобы эмулировать работу IGNORE NULLS, реализованную в Oracle. Вариант с WITH или сабселектом не подходит , так как функции используются в сложном запросе, а решение должно быть 100% рабочим. Пыталась разобраться с пользовательскими аггрегируемыми функциями (полагаю можно реализовать необходимую логику этим способом) по документации https://www.postgresql.org/docs/9.6/static/sql-createaggregate.html, но там черт глову сломит. Не понятно какие значения можно передавать в аргументы, как вообще постгрес понимает что необходимо делать с функцией? Для примера привожу как работает в Oracle IGNORE NULLS. Код: plsql 1. 2. 3. 4. 5. 6.
Код: plsql 1. 2. 3. 4. 5. 6.
Необходимо добиться подобного поведения в постгрес (возможно через пользовательские аггрегируемые функции). Может кто разбирается в этом, может помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2017, 19:58 |
|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
Valentina.Yu, Lead/lag with ignore nulls можно сэмулировать «трюком» на аналитических min/max ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2017, 20:06 |
|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2017, 20:13 |
|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
Щукина АннаValentina.Yu, вариант реализации на last_value/first_value вариант реализации на min/max а, пардон... первый вариант - тоже на аналитическом min/max :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2017, 20:16 |
|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
Всем добрый день. Хотелось бы продолжить разговор, чтобы без трюков. В этих ваших нашел способ решения для lag ignore nulls (правда пришлось допилить, заодно и посмотреть какие значения передаются в эти агрегаты/функции). Код: sql 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.
Проверочный запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
выдает корректные данные: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Но никак не могу понять, как сделать реализацию lead через агрегаты (если вот только как-то отсортировать в обратном порядке на этапе реализации). Может кто-нибудь встречал/делал реализацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 11:00 |
|
Пользовательские аггрегируемые функции
|
|||
---|---|---|---|
#18+
Точно! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Получили: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2018, 12:46 |
|
|
start [/forum/topic.php?fid=53&tid=1995580]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 387ms |
0 / 0 |