Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Приветствую всех! Подскажите, пожалуйста, в SQL2016 появилась ли возможность создавать свои агрегатные функции, не прибегая к CLR? Просто появилась необходимость написать функцию для вычисления разности краевых значений показаний водяных счетчиков в определенном временном интервале. Хотелось бы это все завернуть в красивую оболочку, чтобы можно было потом в коде оперативно заменить такую функцию на стардартную агрегатную типа AVG в случае смены типа измерения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 09:45 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123Подскажите, пожалуйста, в SQL2016 появилась ли возможность создавать свои агрегатные функции, не прибегая к CLR?Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 10:37 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123Приветствую всех! Подскажите, пожалуйста, в SQL2016 появилась ли возможность создавать свои агрегатные функции, не прибегая к CLR? Просто появилась необходимость написать функцию для вычисления разности краевых значений показаний водяных счетчиков в определенном временном интервале. Хотелось бы это все завернуть в красивую оболочку, чтобы можно было потом в коде оперативно заменить такую функцию на стардартную агрегатную типа AVG в случае смены типа измерения. А в чем проблема использовать CLR агрегат? Ничего сложного в нем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 11:38 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
msLexА в чем проблема использовать CLR агрегат? Ничего сложного в нем нет. Эх...мне бы скилетик какой-нить для примера как это правильно оформить. А то я писал до этого только clr для чтения данных из текстовых файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 11:55 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123msLexА в чем проблема использовать CLR агрегат? Ничего сложного в нем нет. Эх...мне бы скилетик какой-нить для примера как это правильно оформить. А то я писал до этого только clr для чтения данных из текстовых файлов.Так прямо в хелпе есть "скелетик", строковая агрегатная функция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 11:57 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123msLexА в чем проблема использовать CLR агрегат? Ничего сложного в нем нет. Эх...мне бы скилетик какой-нить для примера как это правильно оформить. А то я писал до этого только clr для чтения данных из текстовых файлов. https://docs.microsoft.com/en-us/sql/relational-databases/clr-integration-database-objects-user-defined-functions/clr-user-defined-aggregate-invoking-functions?view=sql-server-2017 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 12:14 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Спасибо всем откликнувшимся. Вот сделал по мотивам вышеуказанных материалов сборку, но вот в чем загвоздка: в результирующий набор попадает только последнее значение выборки, а первое - нет. Как можно их явно задать, чтобы все же посчитать разницу. Ниже код выборки: Код: c# 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 08:24 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123, У вас в first попадают первое и второе value, так задумано? Покажите пример входных данных и что должно быть на выходе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 09:44 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Alexander TitkinConst123, У вас в first попадают первое и второе value, так задумано? Покажите пример входных данных и что должно быть на выходе Скорее всего написал так просто из-за выборки, можно исправить на Код: c# 1. Но это не меняет сути проблемы, мне в результате нужно получить Value_=24, т.е. 6795-6771. А получается на выходе 6795 при работе этой сборки, т.е. последнее значение. Date_Time_ Value_2018-03-29 09:29:02.533 02018-03-29 09:30:02.533 67712018-03-29 09:31:02.527 67722018-03-29 09:38:23.527 67732018-03-29 09:46:23.523 67742018-03-29 09:54:43.567 67752018-03-29 10:02:43.563 67762018-03-29 10:10:03.563 67772018-03-29 10:18:03.560 67782018-03-29 10:26:23.557 67792018-03-29 10:34:23.553 67802018-03-29 10:42:23.550 67812018-03-29 10:50:23.547 67822018-03-29 11:02:43.563 67832018-03-29 11:26:03.557 67842018-03-29 12:15:24.530 67852018-03-29 12:59:44.533 67862018-03-29 13:12:04.550 67872018-03-29 13:17:04.567 67882018-03-29 13:20:04.547 67892018-03-29 13:24:04.570 67902018-03-29 13:28:44.540 67912018-03-29 13:35:24.547 67922018-03-29 13:42:04.550 67932018-03-29 13:49:04.553 67942018-03-29 13:55:44.560 6795 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 11:55 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Еще в догонку хочу спросить как преобразовать выражение типа: Код: sql 1. 2. в бинарную сборку типа: Код: sql 1. 2. 3. чтобы в дальнейшем отказаться от файла dll? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 12:01 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123, c 2012 есть FIRST_VALUE которого достаточно для ваших танцев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 12:04 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123, Во-первых, фигня вышла, тебе нужно первое и последнее, при этом. Код: c# 1. Во-вторых, эта задача решается чисто на SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 14:33 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Руслан ДамировичConst123, Во-первых, фигня вышла, тебе нужно первое и последнее, при этом. Код: c# 1. Во-вторых, эта задача решается чисто на SQL. IsInvariantToOrder = false все равно не дает нужного результата. Но почему эту задачу нельзя решить через CLR без усложнения конструкций запроса? Ведь FIRST_VALUE отребует конструкции с OVER и partition by. Как же тогда будет выглядеть запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 15:09 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123Как же тогда будет выглядеть запрос? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 15:22 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123Еще в догонку хочу спросить как преобразовать выражение типа: http://tomeko.net/online_tools/file_to_hex.php ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 15:26 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
И все-таки вопрос с CLR остается открытым, так как возможно придется решать эту задачу на MSSQL 2008 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 15:59 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123И все-таки вопрос с CLR остается открытым, так как возможно придется решать эту задачу на MSSQL 2008 Ой, вьюноша, и шо? Таки SQL2008 уже не торт, а CLR спасет мир? Ну и молодежь, все лишь бы новомодные функции внедрить... Код: 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. 49. 50. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 16:54 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Руслан ДамировичОй, вьюноша, и шо? Таки SQL2008 уже не торт, а CLR спасет мир? Ну и молодежь, все лишь бы новомодные функции внедрить... А вы, дедушка, похоже так и не поняли, к чему я клоню ;) Дело в принципе - разобраться, почему это не работает именно в CLR-сборке, текст которой я привел выше. К тому же колонка [Value], указанная мной в примере, всего лишь одна из ста в реальной таблице, которую необходимо будет обработать. Какой величины тогда получится текст функции/хранимки без использования CLR? И будет ли это быстро работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 01:03 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Может счетчик проверять все-таки на ноль? И потом инкремент у вас странный. Хотя там пойдет и признак - первый / не первый. Далее, в вашей выборке первое значение равно 0, так что результат 6795 вполне корректен. Еще есть момент - первое и последнее значение зависит от сортировки набора. Я вот не могу ручаться, что СУБД протащит через агрегат в том порядке, в котором вы задумали (этот момент просто не знаю). Для суммы то все равно в каком порядке пройдут значения. Для гарантии сортировки в агрегат нужно передавать значения поля, по которому будет осуществляться сортировка данных в окне. А в CLR мутить запоминания минимума и максимума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 11:46 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
dymkaМожет счетчик проверять все-таки на ноль? И потом инкремент у вас странный. Хотя там пойдет и признак - первый / не первый. Далее, в вашей выборке первое значение равно 0, так что результат 6795 вполне корректен. Еще есть момент - первое и последнее значение зависит от сортировки набора. Я вот не могу ручаться, что СУБД протащит через агрегат в том порядке, в котором вы задумали (этот момент просто не знаю). Для суммы то все равно в каком порядке пройдут значения. Для гарантии сортировки в агрегат нужно передавать значения поля, по которому будет осуществляться сортировка данных в окне. А в CLR мутить запоминания минимума и максимума. Спасибо большое за отклик (боялся, что местные старички-классики T-SQL продолжат закидывать меня ссаными тряпками), обязательно прислушаюсь к вашим рекомендациям, попробую покумекать на своим кодом :) Есть еще вариант - завернуть в CLR динамический SQL и там попробовать его обыграть. Собственно интерес к CLR-решению появился именно из-за невозможности выполнения sp_executesql с параметрами (да и без) в теле функции. Не я первый с этим столкнулся и многие пытаются на форуме как-то разными путями выкручиваться в данной ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 12:54 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123боялся, что местные старички-классики T-SQL продолжат закидывать меня ссаными тряпкамиСтарички-классики, в отличие от вас, прекрасно знают цену решениям с SQLCLR и не пользуются ими без крайней нелобходимости. Вы же пока не научились эффективно решать своли задачи на T-SQL. Об этом свидетельствует желание запихнуть sp_ececutesql в функцию и т.п. Ваша хотелкаConst123Хотелось бы это все завернуть в красивую оболочку, чтобы можно было потом в коде оперативно заменить такую функцию на стардартную агрегатную типа AVG в случае смены типа измерения.Вполне может быть решена и без CLR. Например, продемонстриролванным далее способом. Агрегатные функции Код: c# 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. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. Установка сборки Код: 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. Небольшой тест Код: 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. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2018, 15:55 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
invmВполне может быть решена и без CLR. Например, продемонстриролванным далее способом. Спасибо за ценные советы. Все что касается непосредственно кода - весьма поучительно. invmСтарички-классики, в отличие от вас, прекрасно знают цену решениям с SQLCLR и не пользуются ими без крайней нелобходимости. Вы же пока не научились эффективно решать своли задачи на T-SQL. Об этом свидетельствует желание запихнуть sp_ececutesql в функцию. И какова же эта цена? Дыра в безопасности, утечка памяти или что-то еще? Может зря вообще Microsoft сделал эту возможность? А вот самоутверждение предыдущих ораторов за счет менее опытных в определенных вопросах оппонентов есть признаки невзоровщины. У него лекции "как довести конкурента по бизнесу до инсульта" тоже очень дорого стоят как и ваше драгоценное время, потраченное на нас, убогих ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2018, 09:40 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123, Задачи вычислений в БД стояли задолго до того как появилась возможность прикручивать UDF, и эти задачи успешно решались и не только аналитическими функциями. Просто есть два варианта: с помощью грубой силы, как школьник - нагромоздить многостраничное решение, или грамотно, часто это намного проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2018, 09:54 |
|
||
|
Агрегантая функция пользователя
|
|||
|---|---|---|---|
|
#18+
Const123но вот в чем загвоздка: в результирующий набор попадает только последнее значение выборки, а первое - нет.У меня такая же ошибка, как и у вас. Метод Accumulate должен выглядеть так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Const123И какова же эта цена?Падение производительности. В меньшей степени - отсутствие должной гибкости. Const123Может зря вообще Microsoft сделал эту возможность?Для реализации того, что невозможно или весьма затруднительно/эффективно реализовать на TSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2018, 10:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39660647&tid=1689560]: |
0ms |
get settings: |
11ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
106ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 499ms |

| 0 / 0 |
