Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть такая таблица: Код: plaintext 1. 2. 3. Нужно получить для первой строки если SUMM1 >= SUMM2, то SUMM2, иначе SUMM1 Для остальных строк если SUMM1 >= SUMM2 - sum(то, что получилось в предыдущих строках), то SUMM2 - sum(то, что получилось в предыдущих строках), иначе sum(то, что получилось в предыдущих строках) - SUMM1. В приведенном примере должно получиться 20000 5000 0 Подскажите, как такое сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 14:02 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Павел Гужанов, Строго по описанию: Код: 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. Если есть гарантии, что ID строго последовательны, то можно обойтись без t2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 15:45 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#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. Подскажите пожалуйста, почему Вы использовали LEAST а не MIN? Или это не принципиально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 16:40 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
Павел Гужанов, Отдельная DETERMINISTIC функция без EXTERNAL ACTION может "дёргаться" один (а может и не один) раз для каждой строки исходной таблицы, что может быть чуть-чуть быстрее, если это существенно. В любом случае правило расчёта следующей суммы лучше иметь в строго одном месте, чтобы не забыть поправить, если оно поменяется в будущем. С использованием ф-ии выражение в целом становится чуть более читаемо. Сейчас даже содержимое CASE'ов там разное, поди догадайся, что там имелось ввиду. Я бы также рекомендовал внимательно отнестись к ID (без пропусков строго от единицы и далее через 1). Если это не данные откуда-то извне (типа номеров строк), а IDENTITY поле, то там могут быть пропуски (рубильник выключили, транзакция на вставке отвалилась, а номер уже выбрали). Если пропуски есть, то надо строки "перенумеровать" в промежуточном выражении. LEAST(...) - только чтобы явно указать семантику. Для читаемости. То, что это скалярная функция, а не аггрегативная (максимальное значение в колонке). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2013, 18:01 |
|
||
|
Помогите написать запрос
|
|||
|---|---|---|---|
|
#18+
К сожалению, такой вариант в некоторых ситуациях работал неправильно. Придумал другой запрос, он работает правильно. По-крайней мере, я пока не нашел такого варианта исходных данных, при котором результат получился бы неправильным (3 - это максимальное занчение поля ORDER, которое может быть): Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2013, 12:15 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=31&tid=1601308]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 143ms |

| 0 / 0 |
