Дополнительные записи при использовании в качестве подзапроса: Доступ - PullRequest
0 голосов
/ 01 июня 2018

Я начинающий разработчик с базовым опытом работы с SQL, и эта проблема «решала мои проблемы» в течение последних нескольких дней.Я пару раз хотел задать вопрос и подумал ... пока нет ... продолжайте пытаться.

У меня есть таблица:

  • ID
  • Store
  • Product_Type
  • Delivery_Window
  • Despatch_Time
  • Despatch_Type
  • Pallets
  • Cartons
  • Многие другие столбцы (start_week и day_num - это два из них)

Моя цель - получить списокproduct_type

Я проверил базовый запрос.

SELECT Product_Type, Store, Min(Despatch_Time) as MinDes
FROM table
GROUP BY Store, Product_Type

Работает хорошо, я получаю 200 строк какожидается.

Теперь я хочу, чтобы эти 200 строк имели другую связанную информацию записи: Delivery_Window, start_week и т. д.

Я пробовал следующее.

SELECT * FROM Table WHERE EXISTS
(SELECT Product_Type, Store, Min(Despatch_Time) as MinDes
FROM table
GROUP BY Store, Product_Type)

Я попытался выполнить внутренние и правильные объединения, все возвратили более 200 записей, моя первоначальная сумма.

Я проверил дополнительные записи, и это то место, где есть одинаковое время отправки для магазина и типа продукта.но для другого типа отправки.

ТакМне нужна помощь в создании запроса, в котором я ограничиваю его исходным подзапросом, но даже если есть совпадающие минимальные времена отправки, он все равно будет ограничивать количество до одной записи по магазину и типу продукта.

Текущий запрос:

SELECT *
FROM table AS A INNER JOIN 
(Select Min(Despatch_Time) as MinDue, store, product_type
FROM table
WHERE day_num = [Forms]![FRM_SomeForm]![combo_del_day] AND start_week =[Forms]![FRM_SomeForm]![txt_date1]
GROUP BY store, product_type) AS B 
ON (A.product_type = B.product_type) AND (A.store = B.store) AND (A.Despatch_Time = B.MinDue);

1 Ответ

0 голосов
/ 01 июня 2018

Я думаю, вы хотите:

SELECT t.*
FROM table as t
WHERE t.Dispatch_Time = (SELECT MIN(t2.Dispatch_Time)
                         FROM table as t2
                         WHERE t2.Store = t.Store AND t2.Product_Type = t.Product_Type);

Вышеприведенное вернет дубликаты.Чтобы избежать дубликатов, вам нужен ключ для обеспечения уникальности.Позвольте мне предположить, что у вас есть первичный ключ pk:

SELECT t.*
FROM table as t
WHERE t.pk = (SELECT TOP (1) t2.pk
              FROM table as t2
              WHERE t2.Store = t.Store AND t2.Product_Type = t.Product_Type
              ORDER BY t2.Dispatch_Time, t2.pk
             );
...