Имя: Пароль:
1C
1С v8
маленький запросик
0 ХочуСпец
 
28.05.12
14:08
Есть таблица:

Путь   Важность  Сумма
Путь1  1         1000
Путь2  2         1000
Путь3  1         5000
Путь4  3         10 000

Есть некий параметр.
Н-р, если параметр = 7000, это означает что мы должны отобрать строки (строку) ближайшие у которых Сумма <= 7000.

В данном случае это будет третья строка.

Если параметр = 2000, то в выборку должны попасть первые две строки.
1 Wobland
 
28.05.12
14:09
продолжайте наблюдения
2 Нуф-Нуф
 
28.05.12
14:09
получи нарастающий итог и на него накладывай ограничение
3 Wobland
 
28.05.12
14:10
(2) не, нарастающий тут ни при чём.
добавь колонку про разницу между желаемым и имеемым и продолжай наблюдения
4 DrShad
 
28.05.12
14:10
можно пакетником - отобрать различные суммы, потом первую <= МояСумма и затем уже все строки с суммой равной ей
5 Kashemir
 
28.05.12
14:12
А если 8000 ?
6 ХочуСпец
 
28.05.12
14:13
(5) тоже самое что и при 7000
7 Kashemir
 
28.05.12
14:13
(3) Нарастающим тут как раз и решается
8 ХочуСпец
 
28.05.12
14:13
(5) четвертую строку в данном случае отсекаем
9 Wobland
 
28.05.12
14:14
(7) >отобрать строки (строку) ближайшие у которых Сумма
точно?
10 ХочуСпец
 
28.05.12
14:14
(7) но ведь поле Сумма не должна агрегироваться
11 0_Serg_0
 
28.05.12
14:14
(6) если 8 000 - то последняя
12 0_Serg_0
 
28.05.12
14:15
тюплю)
13 Fragster
 
гуру
28.05.12
14:16
автору надо задать вопрос - а если 6000?
14 Бледно Золотистый
 
28.05.12
14:17
(0) Выбираем первый максимальный удовлетворяющий условию - это вложенный запрос,потом связь по сумме с исходной таблицей
15 ХочуСпец
 
28.05.12
14:19
(12) если 6000 отбирается третья строка
16 Kashemir
 
28.05.12
14:20
А "важность" здесь роль играет ?
17 Kashemir
 
28.05.12
14:23
Вобщем с учетом приоритетности "важности" и уникальности ключей путь+важность

ВЫБРАТЬ
   ТЗ.Путь,
   ТЗ.Важность,
   ТЗ.Сумма
ПОМЕСТИТЬ ТЗ
ИЗ
   &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВложенныйЗапрос.Путь,
   ВложенныйЗапрос.Важность,
   ВложенныйЗапрос.НарастающийИтог,
   ТЗ.Сумма
ИЗ
   (ВЫБРАТЬ
       ТЗ.Путь КАК Путь,
       ТЗ.Важность КАК Важность,
       СУММА(ТЗ1.Сумма) КАК НарастающийИтог
   ИЗ
       ТЗ КАК ТЗ
           ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ1
           ПО (ТЗ.Важность > ТЗ1.Важность
                   ИЛИ ТЗ.Важность = ТЗ1.Важность
                       И ТЗ.Путь >= ТЗ1.Путь)
   
   СГРУППИРОВАТЬ ПО
       ТЗ.Путь,
       ТЗ.Важность) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ
       ПО ВложенныйЗапрос.Путь = ТЗ.Путь
           И ВложенныйЗапрос.Важность = ТЗ.Важность
ГДЕ
   ВложенныйЗапрос.НарастающийИтог <= &ОграничениеСуммы
18 Fragster
 
гуру
28.05.12
14:23
Выбрать
Путь, Важность, Сумма, Выбор Когда Сумма > &Параметр Тогда Сумма - &Параметр Иначе &Параметр - Сумма Конец как Разность
Поместить ВТ;
Из Таблица

Выбрать
МИНИМУМ(Разность) как Разность
Поместить МИ
Из ВТ;

Выбрать * Из ВТ Внутреннее Соединение мин По Вт.Разность = Мин.Разность
19 Fragster
 
гуру
28.05.12
14:24
повторить для важности при необходмости
20 Kashemir
 
28.05.12
14:29
(9) Может и так. Больно постановка размытая и примеры вполне подходят как к набору на определенную сумму, так и на выбор максимального удовлетворяющего условию. Во втором случае все слишком скучно и неясно зачем тут столько 20 постов уже налепили :)
21 ХочуСпец
 
28.05.12
14:34
(18) выбираем не ближайшим, не корректно использовал в данном случае это слово
(20) что именно размыто?
22 ХочуСпец
 
28.05.12
14:35
в (0), (5) все разжевано
23 Kashemir
 
28.05.12
14:36
С максимальной суммой можно например так


ВЫБРАТЬ
   ТЗ.Путь,
   ТЗ.Важность,
   ТЗ.Сумма
ПОМЕСТИТЬ ТЗ
ИЗ
   &ТЗ КАК ТЗ
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ТЗ.Путь,
   ТЗ.Важность,
   ТЗ.Сумма
ИЗ
   ТЗ КАК ТЗ
ГДЕ
   ТЗ.Сумма В
           (ВЫБРАТЬ
               МАКСИМУМ(ТЗ.Сумма) КАК Сумма
           ИЗ
               ТЗ КАК ТЗ
           ГДЕ
               ТЗ.Сумма < &ОграничениеСуммы)


(21) Я описал 2 разных варианта трактовки твоей задачи. Наличие оных и говорит о размытости постановки.
24 ХочуСпец
 
28.05.12
14:47
(23) спасибо