|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
Здравствуйте! На входе дана такая таблица: время сумма 12:20 500 12:21 600 12:22 -500 12:30 1000 13:00 700 13:01 -700 13:02 700 Скажите, как можно удалить парные записи (в примере выше выделены жирным ) по таким условиям: 1. Сумма в парных записях одинакова по модулю, но отличается по знаку. 2. Разница по времени между двумя парными записями не более 10 минут. 3. Между двумя парными записями могут быть другие, не относящиеся к этой паре. 4. Обратите внимание - последнюю запись в примере вверху удалять не нужно, т.к. у нее нет пары (предыдущая запись уже является парной). Т.е. нужно удалить парные записи так, чтобы общая сумма по столбцу "сумма" не поменялась. Т.е. удаляем только четное число записей в каждой из цепочек. результат: время сумма 12:21 600 12:30 1000 13:02 700 Можно ли это как-то реализовать только на чистом SQL (т.е. без использования скриптов с циклами и т.п.)? У меня одна из проблем связана с реализацией п.4 Спасибо! P.S. Не обязательно на синтаксисе ACCESS, можно другой СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:07 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
Вопрос 1: можно ли п. 1 дополнить условием, что время у записи с отрицательной суммой больше комплементарной ей записи с положительной суммой? Вопрос 2: какая из записей должна остаться в случаевремя сумма10:00 10010:01 10010:02 10010:03 -10010:04 -100и почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:39 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
Akina , 1. Вообще может быть и обратный порядок, т.е. сначала идет запись с отрицательной суммой, а потом с положительной. И обе ситуации могут встречаться, т.е. не являются исключениями. Но можно реализовать хотя бы вариант, когда сначала только положительная, если это сделать проще. Потом, возможно, просто продублировать с небольшими изменениями для обратной ситуации? 2. Насколько я понимаю, возможны как минимум два варианта: 2.1. FIFO (first in, first out). Тогда должна остаться запись 10:02 100 2.2. LIFO (last in, first out). Тогда должна остаться запись 10:00 100 Я пока еще сам не определился, какое правило более корректное, т.к. не знаю все особенности данного бизнес-процесса. Но могу сказать, что такая ситуация не является характерной, т.е. является относительно редкой (хоть и исключить ее нельзя). Можно реализовать то, что проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 12:57 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
ArtiP.S. Не обязательно на синтаксисе ACCESS, можно другой СУБД. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
idвремясумма21900-01-01 12:21:00.000600,0041900-01-01 12:30:00.0001000,0081900-01-01 13:02:00.000700,00 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2018, 13:07 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
court , большое спасибо вам за скрипт! Мне самому было бы сложно такое придумать. Если не секрет, насколько часто вы с такого рода логикой в запросах встречаетесь? Или вы придумали специально под эту задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 20:20 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
ArtiИли вы придумали специально под эту задачу?да Кстати, я не уверен в оптимальности такого решения. Думаю, если бы вы спросили в ГФ, там бы предложили что-то и получше :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 09:45 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
court , я не знаю, можно ли сделать более эффективный запрос с т.з. скорости работы, но логика работы вроде верная, размер компактный. Скажите, а что такое ГФ? Я не нашел здесь специального форума, где можно было бы задавать вопросы по "общему" SQL. Если только "Вопрос-Ответ"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 15:00 |
|
Помогите с запросом/скриптом
|
|||
---|---|---|---|
#18+
ArtiСкажите, а что такое ГФ?Это форум по МS SQL - http://www.sql.ru/forum/microsoft-sql-server ArtiЯ не нашел здесь специального форума, где можно было бы задавать вопросы по "общему" SQL.Сначала нужно определиться, что такое "общий SQL" :) , так как последний стандарт, вроде как уже содержит оконные функции ... Но всегда можно уточнить, что запрос должен быть в стандарте ANSi-89 SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2018, 06:31 |
|
|
start [/forum/topic.php?fid=45&msg=39624643&tid=1611522]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 420ms |
0 / 0 |