powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Возможно ли такое с помощью SQL?
25 сообщений из 40, страница 1 из 2
Возможно ли такое с помощью SQL?
    #33901836
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый господа!
Есть таблица с количеством записей порядка 20-30, например table1 , которая в свою очередь имеет числовое поле, например field1 . И есть диапазон значений, например min и max . Необходимо выбрать как можно меньше записей из table1 , при этом их общая сумма по полю field1 должна быть больше min и меньше max .
Подскажите плиз, каким образом это можно сделать с наименьшими затратами производительности, возможно это и просто, но мне что-то не видится решения без применения PL/SQL.. да и там неясность пока..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901838
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗЫ: подойдет любая информация, линки..
Заранее спасибо..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901865
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему любая одна запись с min<field1<max удовлетворяет условию задачи?
Или я что-то упустил?
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901882
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BirkhoffПо моему любая одна запись с min<field1<max удовлетворяет условию задачи?
Или я что-то упустил?

не факт.. Допустим min = 600 max = 650
а в таблице 4 записи (простейший вариант) со значением поля field1:
для 1-ой 400, 2-я - 300, 3-я - 200, 4-ая - 100... так в результат дожны попасть 1-ая и 3-я запись... хех..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901886
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗЫ: эти две записи в сумме дают необходимые 600, и их всего две в отличии от варианта когда 2-ая, 3-ая и 4-ая также в сумме дают необходимый min..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901890
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для 9+

Код: plaintext
1.
2.
3.
select field1, summ
from (select field1, sum(field1) over (order by field1 desc) summ
      from table1)
where summ <= min

Только условие во where подправь чуть
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901891
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BirkhoffПо моему любая одна запись с min<field1<max удовлетворяет условию задачи?
Или я что-то упустил?

млин, туплю уже сижу... да, совершенно верно! но, что делать когда не будет такой записи?
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901892
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__vvp_Для 9+

Код: plaintext
1.
2.
3.
select field1, summ
from (select field1, sum(field1) over (order by field1 desc) summ
      from table1)
where summ <= min

Только условие во where подправь чуть

сиб.. буду пробовать..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901893
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не катит((
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901897
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает с 8.1.6. - поправка :)

В результате работы этого запроса не хватит одной строки, если итоговая сумма <> min, если равна, то катит. Вот это и допиши
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901902
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__vvp_Работает с 8.1.6. - поправка :)

В результате работы этого запроса не хватит одной строки, если итоговая сумма <> min, если равна, то катит. Вот это и допиши

Ну ды получается тогда, что если сумма <> min (1-й вариант), то мне опять придется набирать записи, но только уже на сумму min - итоговая сумма...
Если я правильно понял конечно... это не годится..
Да и, field1 в записях может равняться как 100, так и 10000000, соответсвенно и min, max может быть 10-12, или 10-1000000... если поможет кому..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901904
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
select field1, summ
from (select field1, sum(field1) over (order by field1 desc) summ,
                     lead(field1,  1 ,  0 ) over (order by field1 desc) ld
      from table1)
where (summ <= min or summ < min + ld) and summ <= max
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901917
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Загрузил... :). Последняя поправка

select field1
from (select field1, sum(field1) over (order by field1 desc) summ,
                     lead(field1,  1 ,  0 ) over (order by field1 desc) ld
      from table1)
where (summ <= min + ld) and summ <= max
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901918
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то же самое(( выдает в результат только 400...
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901921
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хех... и это также не выдает необходимого((
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901923
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, не то. Тут же не по порядку убывания надо....
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901927
__vvp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут только PL/SQL.

1. Взять максимальное значение field1 из диапазона
2. Найти второй field1, значение которого в сумме с первым даст значение не больше max
и т.д.
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33901932
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__vvp_Тут только PL/SQL.

1. Взять максимальное значение field1 из диапазона
2. Найти второй field1, значение которого в сумме с первым даст значение не больше max
и т.д.

вот меня и страшит это "так далее"...
как видно из примера, как раз запись с максимальным field1 и не подходит..
я уже голову сломал(( и книги толковой нет.. на Delphi, или C, я думаю это не сложно было бы нарисовать рекурсией, и то не факт, не пробовал... а тут.. я вообще запутался((
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902025
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danilov_voЕсть таблица с количеством записей порядка 20-30, например table1 , которая в свою очередь имеет числовое поле, например field1 . И есть диапазон значений, например min и max . Необходимо выбрать как можно меньше записей из table1 , при этом их общая сумма по полю field1 должна быть больше min и меньше max .
STFF запрос для подсчета суммы чисел и проверки соответствия суммы данному числу, для начала :)
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902169
Владимир Бегун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
danilov_voЗЫ: подойдет любая информация, линки..
http://vbegun.blogspot.com/2005/11/sql-puzzle-iii.html
Код: plaintext
1.
2.
3.
-- 
Vladimir Begun       |  http://alexeymazanov.narod.ru/ 
The statements and opinions expressed here are my own
and do not necessarily represent those of Oracle. 
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902411
Mikst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не забывайте про слечай например для min=600 max=650
из ряда чисел 550 450 350 250 151

т.е. сумма 550+151 уже больше.
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902503
ksm80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select * 
  from (select num, 
--             max(num) over() max_num, 
	       sum(num) over(order by num desc rows between unbounded preceding and current row) cur_sum 
          from test
         where num< 500  and num> 100 ) 
 where cur_sum< 500   



-- crete table test (num number)
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902645
danilov_vo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем откликнувшимся огромное спасибо! В виду огранечения по времени выполнения задачи решил все-таки сделать средствами PL/SQL, причем без условия "как можно меньше записей "... думаю, что это намного повысит производительность..
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902726
ksm80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для того что бы перебрать все возможные значения - тебе надо цикл от 1 до 2^n степени, где n - количество элементов, удовлетворяющих условию. Условие "как можно меньше записей" и "первое попавшиеся" предполагает как можно быстрейший выход из цикла.
Теоретически возможен вариант кода тебе прийдёться перебрать весь массив, а для 30 элементов это 1.073.741.824, вообщем шахматы
...
Рейтинг: 0 / 0
Возможно ли такое с помощью SQL?
    #33902737
Mikst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ksm80Для того что бы перебрать все возможные значения - тебе надо цикл от 1 до 2^n степени, где n - количество элементов, удовлетворяющих условию. Условие "как можно меньше записей" и "первое попавшиеся" предполагает как можно быстрейший выход из цикла.
Теоретически возможен вариант кода тебе прийдёться перебрать весь массив, а для 30 элементов это 1.073.741.824, вообщем шахматы

Перебирать весь массив это конечно вариант. но уж больно долго.

Если нужно условие "как можно меньше записей" - можно попробовать примерно такой алгоритм: ищем сначала одну запись, если такой нет, то ищем подходящую пару, ну и т.д. опять же на ПЛСКЛ
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Возможно ли такое с помощью SQL?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]