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

Visual FoxPro9
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676294
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
delete Таблица ;
from Таблица tab1 ;
where exists(select 'x' from Таблица tab2 ;
		where tab1.Номер_Товара = tab2.Номер_Товара ;
			and tab1.Наименование = tab2.Наименование ;
			and tab1.Цена < tab2.Цена)

Если есть две записи для одного товара с одной и той же (максимальной) ценой, то без дополнительных идентификаторов подобная задача будет решаться только сканированием таблицы.
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676295
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример, как надо удалить записи

Товар1 Цена = 1р
Товар1 Цена = 10р
Товар1 Цена = 2р
Товар1 Цена = 15р

Что должно остаться в конечной табличке?
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676298
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
SELECT id_tov,MIN(cena) as cena_min,COUNT(*) as ncount FROM sp_tov GROUP BY  1  HAVING COUNT(*)> 1  INTO CURSOR cmin
SCAN
	tov_id=cmin.id_tov
	min_cena=cmin.cena_min
	DELETE FROM sp_tov WHERE id_tov=m.tov_id AND cena_min=m.min.cena
endscan
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676340
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Код: plaintext
1.
2.
3.
4.
5.
6.
delete Таблица ;
from Таблица tab1 ;
where exists(select 'x' from Таблица tab2 ;
		where tab1.Номер_Товара = tab2.Номер_Товара ;
			and tab1.Наименование = tab2.Наименование ;
			and tab1.Цена < tab2.Цена)

Глючит в таком синтаксисе.

Корректно работает так

Код: plaintext
1.
2.
3.
4.
5.
6.
delete ;
from Таблица ;
where exists(select 'x' from Таблица tab2 ;
		where Таблица.Номер_Товара = tab2.Номер_Товара ;
			and Таблица.Наименование = tab2.Наименование ;
			and Таблица.Цена < tab2.Цена)
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676363
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maks_888не силен в фоксе, но нужно почистить таблицу,
поэтому подскажите как выполнить следующий запрос,
есть таблица с товаром, иногда встречается товар одинаковый по наименованию но с другой ценой, как удалить тот товар который дублируется но с наименьшей ценой,
структура примерно такова:
номер товара
наименование
цена

Visual FoxPro9
Если "номер товара" - это уникальный ключ товара (как я понял, первичного ключа у таблицы "товары", к сожалению нет), то можно удалить из таблицы "товары" все записи с немаксимальными ценами, например (один из вариантов), так:
Код: plaintext
1.
2.
3.
DELETE FROM товары WHERE номер товара NOT IN (
SELECT g.номер товара FROM товары g INNER JOIN ;
(SELECT номер товара, MAX(цена) AS цена FROM товары GROUP BY номер товара) n ;
ON g.номер товара= n.номер товара AND g.цена= n.цена)
С уважением, Алексей
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676390
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KЕсли "номер товара" - это уникальный ключ товара (как я понял, первичного ключа у таблицы "товары", к сожалению нет)

А чем поможет PK для таблицы Товары?

Я так понял, что данная табличка Товары просто прайс.
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676563
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistAleksey-KЕсли "номер товара" - это уникальный ключ товара (как я понял, первичного ключа у таблицы "товары", к сожалению нет)

А чем поможет PK для таблицы Товары?

Я так понял, что данная табличка Товары просто прайс.
А только тем, что вместо сравнения по двум полям (номер товара и цена):
Код: plaintext
1.
DELETE FROM товары WHERE NOT EXISTS(SELECT * FROM (SELECT номер товара, MAX(цена) AS цена FROM товары GROUP BY номер товара) a 
WHERE товары.номер товара = a.номер товара AND товары.цена = a.цена)
Можно сравнивать только по PK:
Код: plaintext
1.
DELETE FROM товары WHERE PK NOT IN (
 (SELECT TOP  1  PK FROM товары t1 WHERE товары.номер товара = t.номер товара ORDER BY t1.Цена DESC)
С уважением, Алексей
...
Рейтинг: 0 / 0
отбор с наименьшей суммой
    #35676605
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K,

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


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