Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#18+
id cash time Code 1 300 10.14.00 1 2 -450 10.16.00 2 3 100 10.21.00 1 4 200 10.22.00 1 5 555 10.26.00 1 6 -848 10.30.00 2 7 80 10.32.00 1 8 400 10.36.00 1 9 368 10.38.00 1 10 200 10.39.00 1 В упрощенном виде задача следующая: надо выбрать из такой таблицы только те операции с кодом 2, если за ними в течении 10 минут не было операций с кодом 1, с общей суммой нарастающим итогом равной по модулю сумме операции с кодом 2. То есть в данном случае запрос должен выдать только операцию с id=2, т.к. в последующие 10 минут нет такой последовательности операций с кодом 1, общая сумма которых равна сумме этой операции. А вот операцию с id=6 надо отбросить, т.к. сумма первых трех операций после нее с кодом 1 (id=7, 8, 9) точно равна сумме этой операции по модулю (80+400+368=848). Важный момент - в 10-минутном интервале могут быть еще операции с кодом 1 (в данном кейсе – это id=10), но их уже в расчет брать не надо, если сумма предыдущих операций нарастающим итогом оказалась равна искомой операции. Время операций фиксируется с точностью до одной минуты. Пытался решить эту задачу через запрос с условием NOT EXISTS, в котором в цикле WHILE подсчитывал сумму операций нарастающим итогом (с выходом из цикла по BREAK при равенстве суммы, или по окончании 10 минутного интервала), но оказалось, что внутри SELECT циклы не работают. Подскажите пожалуйста, какую еще конструкцию можно использовать для решения такой задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2019, 12:20 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2019, 12:43 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2019, 18:54 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо большое, красивое решение - помогло наполовину решить задачу! К сожалению пока не смог с его помощью решить вторую половину этой задачи - надо очистить выгрузку не только от операций с кодом 2, если ПОСЛЕ них следовали операции с кодом 1 на такую же сумму, но и от операций с кодом 2, если ПЕРЕД ними в течении 10 минут были операция/операции с кодом 1 на такую же сумму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2019, 14:56 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#18+
В общем случае задача нерешаема. VictorChuffнадо очистить выгрузку не только от операций с кодом 2, если ПОСЛЕ них следовали операции с кодом 1 на такую же сумму, но и от операций с кодом 2, если ПЕРЕД ними в течении 10 минут были операция/операции с кодом 1 на такую же сумму. Время (условно) сумма код010024401860112401161002 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2019, 15:02 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#18+
VictorChuff, Второй подзапрос нужен. Зеркальный. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2019, 15:09 |
|
||
|
Циклы внутри запроса селект?
|
|||
|---|---|---|---|
|
#18+
invm, еще раб большое спасибо - честно говоря не знал про существование такой полезной функции Lag, как впрочем и функции LEAD до ваших ответов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2019, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39858831&tid=1687308]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 403ms |

| 0 / 0 |
