让我们以名称为“项目”和“列”的表格作为数据:项目,卖方,价格,日期。 现在我需要这样的选择器:对于任何项目,我们都需要在卖方建议的某个日期间隔中选择最小价格,如果有多个日期,则只给以后),如果该日期有多个卖方,请显示所有。 我写了一些代码,但它没有从给定列表中获取最少的日期。 我需要在选择器中添加什么才能获得所需的结果?
SELECT *
FROM Items mt
INNER JOIN
(
SELECT Item, MIN(Price) MinPrice
FROM Items
GROUP BY Item
)
t ON mt.Item = t.Item AND mt.Price = t.MinPrice
where Date > '2019-04-01' and Date < '2019-04-15'
sample:
ItemA SellerA 10 2019-04-02
ItemA SellerB 10 2019-04-03
ItemA SellerC 10 2019-04-07
ItemA SellerD 20 2019-04-05
ItemA SellerE 10 2019-04-06
ItemA SellerF 10 2019-04-02
ItemA SellerG 20 2019-04-07
result:
ItemA SellerC 10 2019-04-07
ItemA SellerG 20 2019-04-07
答案 0 :(得分:0)
我想你想要
SELECT it.*
FROM Items it INNER JOIN
(SELECT Item, MIN(Price) as MinPrice
FROM Items
WHERE Date > '2019-04-01' AND Date < '2019-04-15'
GROUP BY Item
) itmin
ON it.Item = itmin.Item AND it.Price = itmin.MinPrice
WHERE it.Date > '2019-04-01' AND it.Date < '2019-04-15' ;
答案 1 :(得分:0)
因此我们无法按日期加入,因为按日期分组可能无法为我们提供日期范围内的最低价格。因此,我们必须使用两个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子句...