Запросить наименьшее подзначение, в котором сгруппировано основное значение

Я пытаюсь создать основу для списка продуктов в запросе MS Access. Основу впоследствии необходимо использовать в форме, в которой продукты визуализируются только с одним из многих изображений, связанных с каждым продуктом. Имя изображения рассчитывается с помощью поля выражения на основе идентификатора продукта и идентификатора цвета, который также является составным первичным ключом для таблицы.

The table name: Images
Field Name  Datatype 
ProductID   Number
ColorID     Number
ImageName   Expression   [ProductID] & "-" & [ColorID] & ".jpg" 

Небольшой вывод из таблицы с более чем 62К записей:

Идантификационный номер продукта ЦветID Имя изображения 100000 6 100000-6.jpg 100000 11 100000-11.jpg 100000 1546 100000-1546.jpg 100001 3 100001-3.jpg 100001 11 100001-11.jpg 100001 18 100001-18.jpg 100001 23 100001-23.jpg 100001 45 100001-45.jpg 100001 230 100001-230.jpg 100002 3 100002-3.jpg 100002 6 100002-6.jpg 100004 11 100004-11.jpg 100004 26 100004-26.jpg 100004 285 100004-285.jpg 100006 3 100006-3.jpg 100006 6 100006-6.jpg 100006 11 100006-11.jpg 100006 106 100006-106.jpg 100007 3 100007-3.jpg 100007 6 100007-6.jpg

Я пробовал использовать Distinct и Group By с функцией MIN Min, но безуспешно.

SELECT ProductID, ColorID, ImageName
FROM Images
GROUP BY ProductID, ColorID, ImageName
HAVING (((ColorID)=(SELECT MIN(ColorID) FROM Images)));

Что я ожидаю от результата запроса:

Идантификационный номер продукта ЦветID Имя изображения 100000 6 100000-6.jpg 100001 3 100001-3.jpg 100002 3 100002-3.jpg 100004 11 100004-11.jpg 100006 3 100006-3.jpg 100007 3 100007-3.jpg

Этот вопрос похож на: MSAccess — запрос на возврат набора результатов самых ранних строк с уникальной комбинацией двух столбцов. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.

June7 26.07.2024 10:15

Спасибо, но не похоже, что это было решение по этой ссылке, и оно было решено в VBA, который не был представлен. Но я попробовал два предложения, но безрезультатно.

Lasse Staalung 26.07.2024 11:58

Кроме того, в результате нет уникальной комбинации двух значений, за исключением составного первичного ключа.

Lasse Staalung 26.07.2024 12:06

1 значение, 2 значения, n значений, концепция будет такой же. И никакого VBA не было. Но если ответ решает проблему, поздравляю. Однако остерегайтесь использования First и Last, которые могут привести к неожиданным результатам, поскольку записи не имеют внутреннего порядка.

June7 26.07.2024 17:43

Я не осознавал, что имя файла изображения было рассчитано на основе двух полей, поэтому да, предложенное решение для ссылки не совсем подходит для вашей ситуации.

June7 26.07.2024 17:56
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
5
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это:

SELECT A.ProductID , MIN(A.ColorID) AS ColorID , FIRST(A.ImageName) AS ImageName
FROM (SELECT ProductID FROM Images GROUP BY ProductID) AS B
INNER JOIN Images AS A 
    ON B.ProductID = A.ProductID
GROUP BY A.ProductID 

ОБНОВЛЯТЬ:

Как упоминалось в июне 7, этот код может возвращать неверные результаты, если идентификаторы ColorID заказа отличаются от образцов данных. Пожалуйста, посмотрите правильный ответ до 7 июня.

Ух ты, сработало великолепно и на 100% соответствует тому, что я хотел. Большое спасибо

Lasse Staalung 26.07.2024 13:06

Будьте осторожны с First и Last, которые могут возвращать неожиданные результаты, поскольку записи не имеют внутреннего порядка.

June7 27.07.2024 04:39

@June7, ты абсолютно прав. Спасибо за подсказку. Подскажите пожалуйста, лучше удалить пост или оставить как есть.

Shahram Alemzadeh 29.07.2024 08:38

Когда я сгенерировал имя ImageName в запросе, я смог получить нужный мне на данный момент результат, но с риском, конечно, что вычисленное имя изображения в таблице Images изменится в будущем. Вероятно, мне следовало использовать результат без вычисленного значения в подзапросе, но пока это хорошо.

SELECT Images.ProductID, Min(Images.ColorID) AS MinOfColorID, [ProductID] & "-" & [ColorID] & ".jpg" AS ImageName
FROM Images
GROUP BY Images.ProductID, [ProductID] & "-" & [ColorID] & ".jpg"
ORDER BY Images.ProductID;

Смотрите правильное решение Шахрама Алемзаде выше моего.

Lasse Staalung 26.07.2024 13:11

Почему вы считаете, что вычисления в запросе представляют риск? Если у вас есть вычисляемое поле в таблице, оно должно отражать тот же результат. Если вы программно сохраняете вычисленный результат в текстовом поле, это другая проблема — не делайте этого.

June7 27.07.2024 18:19

Это оказалось намного проще, чем я ожидал. Учитывать:

SELECT ProductID, Min(ColorID) AS CID, ProductID & "-" & Min(ColorID) & ".jpg" AS ImageName 
FROM Images 
GROUP BY ProductID;

Другие вопросы по теме