Таким образом, мы не можем присоединиться к дате, поскольку группировка по ней может не дать нам минимальную цену в пределах диапазона дат. Поэтому мы должны использовать два предложения where.
Таким образом, мы используем внутренний запрос Z, чтобы получить минимальную цену и максимальную дату на единицу в пределах требуемого диапазона дат. Затем присоединитесь к своему базовому набору, чтобы получить всех продавцов с этой максимальной датой.
Непроверенные:
SELECT I.Item, I.Seller, I.Price,I.Date
FROM ITEMS I
INNER JOIN (SELECT min(price) MinPrice, max(date) maxDate, item
FROM items
WHERE Date > '2019-04-01' and < '2018-04-15'
GROUP BY Item) Z
ON I.Item = Z.Item
AND I.Price = Z.Price
and I.Date = Z.MaxDate
WHERE I.Date > '2019-04-01' and < '2018-04-15'
Но я не думаю, что это правильно ... поскольку максимальная дата не может быть датой, связанной с минимальной ценой ...
Итак ...
SELECT I.Item, I.Seller, I.Price,I.Date
FROM ITEMS I
INNER JOIN (SELECT min(price) MinPrice, item
FROM items
WHERE Date > '2019-04-01' and < '2018-04-15'
GROUP BY Item) Z
ON I.Item = Z.Item
AND I.Price = Z.Price
INNER JOIN (SELECT max(Date) MaxDate, item, Price
FROM items
WHERE Date > '2019-04-01' and < '2018-04-15'
GROUP BY Item, Price) Y
ON I.Item = Y.Item
AND I.Price = Y.Price
AND I.Date = Y.MaxDate
WHERE I.Date > '2019-04-01' and < '2018-04-15'
Но тогда я думаю, что должен быть способ упростить это, так что мне не нужно иметь 3 предложения where ...