|
|
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
День добрый господа! Есть таблица с количеством записей порядка 20-30, например table1 , которая в свою очередь имеет числовое поле, например field1 . И есть диапазон значений, например min и max . Необходимо выбрать как можно меньше записей из table1 , при этом их общая сумма по полю field1 должна быть больше min и меньше max . Подскажите плиз, каким образом это можно сделать с наименьшими затратами производительности, возможно это и просто, но мне что-то не видится решения без применения PL/SQL.. да и там неясность пока.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 16:29 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
ЗЫ: подойдет любая информация, линки.. Заранее спасибо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 16:30 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
По моему любая одна запись с min<field1<max удовлетворяет условию задачи? Или я что-то упустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 17:44 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
BirkhoffПо моему любая одна запись с min<field1<max удовлетворяет условию задачи? Или я что-то упустил? не факт.. Допустим min = 600 max = 650 а в таблице 4 записи (простейший вариант) со значением поля field1: для 1-ой 400, 2-я - 300, 3-я - 200, 4-ая - 100... так в результат дожны попасть 1-ая и 3-я запись... хех.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 18:46 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
ЗЫ: эти две записи в сумме дают необходимые 600, и их всего две в отличии от варианта когда 2-ая, 3-ая и 4-ая также в сумме дают необходимый min.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 18:49 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Для 9+ Код: plaintext 1. 2. 3. Только условие во where подправь чуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:01 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
BirkhoffПо моему любая одна запись с min<field1<max удовлетворяет условию задачи? Или я что-то упустил? млин, туплю уже сижу... да, совершенно верно! но, что делать когда не будет такой записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:02 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
__vvp_Для 9+ Код: plaintext 1. 2. 3. Только условие во where подправь чуть сиб.. буду пробовать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:04 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
не катит(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:08 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Работает с 8.1.6. - поправка :) В результате работы этого запроса не хватит одной строки, если итоговая сумма <> min, если равна, то катит. Вот это и допиши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:12 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
__vvp_Работает с 8.1.6. - поправка :) В результате работы этого запроса не хватит одной строки, если итоговая сумма <> min, если равна, то катит. Вот это и допиши Ну ды получается тогда, что если сумма <> min (1-й вариант), то мне опять придется набирать записи, но только уже на сумму min - итоговая сумма... Если я правильно понял конечно... это не годится.. Да и, field1 в записях может равняться как 100, так и 10000000, соответсвенно и min, max может быть 10-12, или 10-1000000... если поможет кому.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:19 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:28 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:43 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
то же самое(( выдает в результат только 400... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:43 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
хех... и это также не выдает необходимого(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:45 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Действительно, не то. Тут же не по порядку убывания надо.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:50 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Тут только PL/SQL. 1. Взять максимальное значение field1 из диапазона 2. Найти второй field1, значение которого в сумме с первым даст значение не больше max и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 19:57 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
__vvp_Тут только PL/SQL. 1. Взять максимальное значение field1 из диапазона 2. Найти второй field1, значение которого в сумме с первым даст значение не больше max и т.д. вот меня и страшит это "так далее"... как видно из примера, как раз запись с максимальным field1 и не подходит.. я уже голову сломал(( и книги толковой нет.. на Delphi, или C, я думаю это не сложно было бы нарисовать рекурсией, и то не факт, не пробовал... а тут.. я вообще запутался(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 20:01 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
danilov_voЕсть таблица с количеством записей порядка 20-30, например table1 , которая в свою очередь имеет числовое поле, например field1 . И есть диапазон значений, например min и max . Необходимо выбрать как можно меньше записей из table1 , при этом их общая сумма по полю field1 должна быть больше min и меньше max . STFF запрос для подсчета суммы чисел и проверки соответствия суммы данному числу, для начала :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2006, 23:20 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
danilov_voЗЫ: подойдет любая информация, линки.. http://vbegun.blogspot.com/2005/11/sql-puzzle-iii.html Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 08:46 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Не забывайте про слечай например для min=600 max=650 из ряда чисел 550 450 350 250 151 т.е. сумма 550+151 уже больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 10:56 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 11:28 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Всем откликнувшимся огромное спасибо! В виду огранечения по времени выполнения задачи решил все-таки сделать средствами PL/SQL, причем без условия "как можно меньше записей "... думаю, что это намного повысит производительность.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 12:06 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
Для того что бы перебрать все возможные значения - тебе надо цикл от 1 до 2^n степени, где n - количество элементов, удовлетворяющих условию. Условие "как можно меньше записей" и "первое попавшиеся" предполагает как можно быстрейший выход из цикла. Теоретически возможен вариант кода тебе прийдёться перебрать весь массив, а для 30 элементов это 1.073.741.824, вообщем шахматы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 12:28 |
|
||
|
Возможно ли такое с помощью SQL?
|
|||
|---|---|---|---|
|
#18+
ksm80Для того что бы перебрать все возможные значения - тебе надо цикл от 1 до 2^n степени, где n - количество элементов, удовлетворяющих условию. Условие "как можно меньше записей" и "первое попавшиеся" предполагает как можно быстрейший выход из цикла. Теоретически возможен вариант кода тебе прийдёться перебрать весь массив, а для 30 элементов это 1.073.741.824, вообщем шахматы Перебирать весь массив это конечно вариант. но уж больно долго. Если нужно условие "как можно меньше записей" - можно попробовать примерно такой алгоритм: ищем сначала одну запись, если такой нет, то ищем подходящую пару, ну и т.д. опять же на ПЛСКЛ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2006, 12:32 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=33901865&tid=1884117]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 393ms |

| 0 / 0 |
