powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск множества минимумов
13 сообщений из 13, страница 1 из 1
Поиск множества минимумов
    #36644773
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Подскажите пожалуйста, как найти минимальные (во множественном числе) значения для поля. Если использовать агрегатную функцию min - найдется только одно значение, а мне нужны все.
вот пример таблички
cenkodorgp1p2p320051455077200527746811003165749830054777477150326546811053398503310034746310

результатом должно быть:
cenkodorgp1p2p320051455077200527746811003165749810034746310

Т.е. по значению поля kod должны находится минимальные значения cen и выводиться эти строки.
На нижеследующую конструкцию fox ругается. И все равно подзапрос выводит только 1 минимальное значение, а не все.
Код: plaintext
1.
2.
3.
4.
select cen,kod,org,p1,p2,p3 from predl_tmp1 ;
inner join ;
(select kod,MIN(cen) as cen FROM predl_tmp1 GROUP BY kod) t0 ; 
on predl_tmp1.kod=t0.kod and predl_tmp1.cen=t0.cen ;
into cursor rez

Помогите, пожалуста!
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36644860
Погодин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from table where pole=(select min(pole) from table) - ?
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36644891
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Погодин,

Я подчеркивала - нужно МНОЖЕСТВО минимумов, а агрегатная функция возвращает один минимум. Так что моя проблема должна решаться как-то по-другому...
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36644934
З.Ы.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
select min(поле), набор_полей_группировки from таблица group by набор_полей_группировки
?
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36644953
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
З.Ы.,

Такое я и сама могу написать. Если бы все было так просто, я бы не обращалась за помощью.
Я написала вариант своего запроса. Но! там ошибка - это раз. И ищу я только один минимум, а нужно искать как-то все одинаковые минимумы по полю kod.
Так что я все еще ищу помощи!
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36644959
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще всего пройтись SCAN`ом: сравнивать текущее значение с предыдущим и выводить предыдущее, если текущее выросло.
Без учета кода примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create cursor test (cen i)
insert into test values ( 100 )
insert into test values ( 150 )
insert into test values ( 130 )
insert into test values ( 140 )
insert into test values ( 100 )

sele test
go top
lnCenPrev = test.Cen
scan
	if lnCenPrev < test.Cen
		? lnCenPrev
	endif
	lnCenPrev = test.Cen
endscan

чтобы учесть коды - надо либо отсортировать по коду, либо делать SCAN отдельно для каждого кода.
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645004
For Peace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если просто убрать максимальное значения? Останутся минимальные.
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645032
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Margo_
На нижеследующую конструкцию fox ругается.
Код: plaintext
1.
2.
3.
4.
select cen,kod,org,p1,p2,p3 from predl_tmp1 ;
inner join ;
(select kod,MIN(cen) as cen FROM predl_tmp1 GROUP BY kod) t0 ; 
on predl_tmp1.kod=t0.kod and predl_tmp1.cen=t0.cen ;
into cursor rez

А как именно ругается?
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645044
_Margo_,
если нарисуете код создания и наполнения таблиц для Вашего примера, то попробую показать как делаются кореллированные подзапросы для выполнения таких вот задач.
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645064
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Margo_,

Попробуйте один из вариантов (фокса под рукой нет, могу ошибаться)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select * from predl_tmp1 pt
where cen in (select min(cen) from predl_tmp1 where kod = pt.kod)
----------------------------------------------------------------
select predl_tmp1.cen, predl_tmp1.kod, org, p1, p2, p3 from predl_tmp1 
inner join 
(select kod,MIN(cen) as cen FROM predl_tmp1 GROUP BY kod) t0  
on predl_tmp1.kod=t0.kod and predl_tmp1.cen=t0.cen 
----------------------------------------------------------------
select predl_tmp1.cen, predl_tmp1.kod, org, p1, p2, p3 from predl_tmp1 
where (kod, cen) in (select kod, MIN(cen) as cen FROM predl_tmp1 GROUP BY kod)  
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645108
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Margo_З.Ы.,

Такое я и сама могу написать. Если бы все было так просто, я бы не обращалась за помощью.
Я написала вариант своего запроса. Но! там ошибка - это раз. И ищу я только один минимум, а нужно искать как-то все одинаковые минимумы по полю kod.
Так что я все еще ищу помощи!
Уточните условие.
Минимум поля cen в пределах одинаковых kod ?
А если есть повторы cen в пределах одинакового kod, то берем и их?
Если это верно, то можно, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
USE IN SELECT('temp')
CREATE CURSOR temp (cen INT, Kod INT, org INT, p1 INT, p2 INT, p3 INT)
INSERT INTO temp VALUES ( 200 ,  5 ,  1 ,  45 ,  50 ,  77  )
INSERT INTO temp VALUES ( 200 ,  5 ,  2 ,  77 ,  46 ,  81  )
INSERT INTO temp VALUES ( 100 ,  3 ,  1 ,  65 ,  74 ,  98  )
INSERT INTO temp VALUES ( 300 ,  5 ,  4 ,  77 ,  74 ,  77  )
INSERT INTO temp VALUES ( 150 ,  3 ,  2 ,  65 ,  46 ,  81  )
INSERT INTO temp VALUES ( 105 ,  3 ,  3 ,  98 ,  50 ,  33  )
INSERT INTO temp VALUES ( 100 ,  3 ,  4 ,  74 ,  63 ,  10  )

SELECT t1.* FROM temp t1 ;
WHERE cen = (SELECT MIN(t2.cen) FROM temp t2 WHERE t2.Kod = t1.Kod) ;
ORDER BY t1.kod
С уважением, Алексей
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645372
_Margo_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем, кто откликнулся на мою проблему!
Но я нашла решение.
вот так будет правильно (будет возвращаться значения те что я указала в результирующей таблице):

Код: plaintext
1.
2.
3.
select predl_tmp1.kod, predl_tmp1.cen, predl_tmp1.org,predl_tmp1.p1,predl_tmp1.p2,predl_tmp1.p3  ;
from predl_tmp1, (select kod, MIN(cen) as cen FROM predl_tmp1 GROUP BY kod) t0 ; 
where predl_tmp1.kod=t0.kod and predl_tmp1.cen=t0.cen ;
into cursor rez
...
Рейтинг: 0 / 0
Поиск множества минимумов
    #36645439
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
select * ;
from predl_tmp1 ;
where not exists(select 'x' from predl_tmp1 t2 ;
		where t2.kod = predl_tmp1.kod ;
		and t2.cena > predl_tmp1.cena)

Следует иметь в виду, что сравнение полей типа Real (цена) прямым сравнением - сомнительное занятие из-за погрешности округления. Для подобных "приблизительных" величин необходимо всегда искать вхождение в некий диапазон значений, а не сравнивать с абсолютным значением.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск множества минимумов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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