SQL 嵌套连接显示每个产品的当前价格并使用 MAX()

Posted

技术标签:

【中文标题】SQL 嵌套连接显示每个产品的当前价格并使用 MAX()【英文标题】:SQL Nested join showing the current price of each product and using MAX() 【发布时间】:2021-02-02 04:50:08 【问题描述】:

目前每种产品的价格是多少?显示产品代码、产品描述、单位及其当前价格。 提示:您将使用 MAX()。这是一个嵌套连接。

产品表

产品代码

说明

单位

价格历史记录

有效日期

产品代码

单价

有人可以帮我改进我的脚本吗?

这是我的脚本,我正在使用 ibm.cloud

SELECT p.prodCode, p.description, p.unit, MAX(ph.unitPrice) "Current Price"
FROM product p 
FULL  JOIN  priceHist ph
ON   p.prodCode = ph.prodCode
GROUP BY p.prodCode, p.description, p.unit 
ORDER BY MAX (ph.unitPrice);

【问题讨论】:

您将当前价格定义为 priceHistory 表中产品的最高单价?如果价格下跌,这种假设似乎会被打破。我认为当前价格将基于价格发布到 priceHistory 的日期。 我的 priceHist 有 effDate(生效日期。) 我已完成编辑,您能帮我改进一下答案吗? 您可以使用priceHist 两次得到unitPrice 最大effDate 对于每个prodCode:首先您按prodCode 分组并使用max(effDate) as effDate,然后将结果加入这两列相同的priceHist。尝试自己编写这样的连接。之后很容易写一个最后的声明加入product 【参考方案1】:

这将在表格中为您提供每种产品及其最新价格。

SELECT p.prodCode, p.description, p.unit,
       (SELECT unitPrice
        FROM priceHist
        WHERE prodCode = p.prodCode
        ORDER BY effDate DESC
        LIMIT 1
       ) "Current Price"
FROM product p;

【讨论】:

如果没有 WHERE 脚本怎么办?我们将使用 2 priceHist ?【参考方案2】:

我认为不需要完全加入(使用left join),您可以使用where 子句,如下所示:

SELECT p.prodCode, p.description, p.unit, coalesce(ph.unitPrice,p.unitprice)  "Current Price"
FROM product p 
Left JOIN  priceHist ph ON p.prodCode = ph.prodCode
WHERE ph.prodcode is null
   or ph.date_col = (select max(phh.date_col) from pricehist phh on phh.prodcode = ph.prodcode)

【讨论】:

如果没有 WHERE 脚本怎么办?我们将使用 2 priceHist ?【参考方案3】:

在 DB2 中,我会推荐窗口函数:

SELECT p.prodCode, p.description, p.unit, ph.unitPrice as current_price
FROM product p LEFT JOIN
     (SELECT ph.*,
             ROW_NUMBER() OVER (PARTITION BY prodCode ORDER BY effdate) as seqnum
      FROM priceHist ph
     ) ph
     ON ph.prodCode = p.prodCode AND ph.seqnum = 1
ORDER BY ph.unitPrice;

【讨论】:

如果没有 WHERE 脚本怎么办?我们将使用 2 priceHist ? @HiImnewb 。 . .我不知道你在评论中的意思。过滤位于on 子句中。

以上是关于SQL 嵌套连接显示每个产品的当前价格并使用 MAX()的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何从每个连接表中检索最新结果

Magento:从另一家商店获取产品价格?

将嵌套对象的值相加

获取每个产品最新的两条线并获取价格和日期

SQL 通过连接更新表?

使用 PHP PDO 在 SQL 中将多行传递给 UDF