0

我有这个查询

SELECT table_article.articleID, table_article_to_date.sellDate, MIN(table_article.price) AS minPrice
FROM table_article table_article
LEFT JOIN table_article_to_date table_article_to_date ON (table_article.ord_no=table_article_to_date.ord_no)
WHERE table_article.price > 0 AND table_article_to_date.sellDate BETWEEN_TWO_DATES
GROUP BY table_article.articleID, table_article_to_date.sellDate, table_article.price

对于 sell_date,我使用时间范围。我的问题是,每个articleID 我得到多个条目。我希望在指定的时间范围内每个 articleID 的价格最低。DISTINCT 没有与 MIN 一起工作

通过查询进行更改以进行此操作?

4

1 回答 1

0

这里的问题是您将销售日期添加到 GROUP BY 子句。要解决该问题,您需要将其取出并使用子查询将其取回。为此,您可以对查询进行内部连接,并在 id 和 Prize 上使用 id、销售日期和奖品进行查询。此外,不需要 group by 中的奖品,因为它已经在 MIN 中。

SELECT articleData.articleId, articleData.sellDate, articleData.price FROM
  (
    SELECT articleId, MIN(price)
    FROM table
    [...]
    GROUP BY articleId
  ) AS minPrice
  INNER JOIN
  (
    SELECT articleId, sellDate, price
    FROM table
  ) AS articleData
  ON minPrice.price = articleData.price AND minPrice.articleId = articleData.articleId 
于 2020-04-21T09:45:12.613 回答