Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
Бьюсь уже несколько часов, но пока безрезультатно SQL2016 Есть табличка rICAOrDaterCodebAmountpAmountbQuantpQuantlagAmountlagQuantRowNumrAmountuuoo2017-12-311234561000100101010uuoo2018-01-01123456702007101001020uuoo2018-01-02123456501005870730uuoo2018-01-031234565005050540uuee2017-12-311234561000100101010uuee2018-01-01123456700701001020uuee2018-01-021234565005070730 Группировки строятся в разрезе rICAO,rCode Сортировка внутри группы по rDate Забегая вперед: Апдейтом это делается без проблем, но сортировку в нем не задашь и последовательность не всегда правильная получается Нужно в столбец rAmount первой строки установить значение, вычислив его по формуле (пишу формулу как для апдейта) @rAmount=rAmount=(@lagAmount+pAmount)/(@lagQuant+pQuant) где @lagAmount = bAmount = bQuant * @rAmount @lagQuant = bQuant после вычисления первой строки запоминаем результат, чтобы использовать его в следующей строке @rAmount для самой первой строки вычисляется как @rAmount=bAmount/bQuant (разумеется с проверками, во избежание деления на ноль) Получается такой результат rICAOrDaterCodebAmountpAmountbQuantpQuantlagAmountlagQuantRowNumrAmountuuoo2017-12-3112345610001001010110uuoo2018-01-0112345610520071010010215uuoo2018-01-0212345668.333333333333310058707313.6666666666667uuoo2018-01-0312345668.3333333333333050505413.6666666666667uuee2017-12-31123456136.66666666666701001010113.6666666666667uuee2018-01-0112345695.666666666666707010010213.6666666666667uuee2018-01-0212345668.3333333333333050707313.6666666666667 Есть еще вариант с курсором, но что-то он как-то не очень :/ Подскажите, как решаются такие задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 09:43 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
TJ001Подскажите, как решаются такие задачи?рекурсивным СТЕ, например ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 09:49 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
court, Обычные оконные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 09:50 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
TJ001, Через оконные, для текущей строки берем значение предыдущей и считаем все что надо, через case можно сделать проверку на первую строку в окне, первое что пришло в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 09:52 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
aleksrov, С оконкой не получается, потому что должна быть примерно такая конструкция Код: sql 1. 2. 3. но так не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 10:00 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
криво написал оконку, конечно, но смысл понятен, я думаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 10:07 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
court, с рекурсивным cte я пробовал, но что-то тоже какая-то ерунда выходила может неправильно делал, конечно... но результат у меня получался такой же, как если делать нарастающий итог оконкой, типа Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 10:27 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
TJ001court, с рекурсивным cte я пробовал, но что-то тоже какая-то ерунда выходила может неправильно делал, конечно... но результат у меня получался такой же, как если делать нарастающий итог оконкой, типа Код: sql 1. типа этого, что-то: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 11:26 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
court, Да, именно такой вариант я и пробовал, но он возвращает не то, что нужно пока нужный результат дает только курсор или апдейт таблицы, с кластеризованным индексом, чтобы не нарушалась последовательность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 15:09 |
|
||
|
Как использовать результат вычисления предыдущей строки в текущей строке (не сумма)?
|
|||
|---|---|---|---|
|
#18+
TJ001, курсор запилите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 16:16 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39695084&tid=1689188]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 307ms |
| total: | 586ms |

| 0 / 0 |
