SQL从弱采购明细表中获取产品的最后采购价格

Posted

技术标签:

【中文标题】SQL从弱采购明细表中获取产品的最后采购价格【英文标题】:SQL get last purchase price of a product from weak purchase detail table 【发布时间】:2014-05-11 21:50:07 【问题描述】:

我有两个日期变量:@date1 和@date2。 @date1 总是大于 @date2。

我有以下两张表:

+--------+
|purchase|
+--------+
|purch_id|
|date    |
+--------+

+-------------+
|purch_details|
+-------------+
|purch_id     |
|product_id   |
|product_price|
+-------------+

表“purchase”存储购买日期和唯一标识符 (purch_id)。

Purch_details 是一个没有唯一标识符的弱表。它包含购买的详细信息,包括产品 ID (product_id)、我为产品支付的价格 (product_price) 和“购买”表 (purch_id) 的标识符。

使用 SQL 语句,在日期范围 @date1-@date2 中,我想获取我上次购买的每种产品的价格。

换句话说,我想要在日期范围@date-@date2 内我同意购买表格purch_details 中每件产品的最后价格。结果不得包含 product_id 重复项。因此,结果应该是这样的:

+-----------------------------------------+
|product_id | product_price |purchase_date|
|00001      | $10.10        |2014-01-01   |
|00002      | $12.45        |2014-04-30   |
|00003      | $9.20         |2014-04-30   |
+-----------------------------------------+

(我上次在 2014 年 1 月 1 日以 10.10 美元的价格购买了产品 00001。在 2014 年 4 月 30 日,我最后一次以 12.24 美元和 9.20 美元的价格购买了产品 00002 和 00003)

我尝试了以下 SQL:

SELECT 
    purch_details.purch_id,
    purch_details.purch_price,
    purchase.date
FROM 
    purchase
    INNER JOIN
    purch_details ON purchase.purch_id=purch_details.purch_id
WHERE 
    purchase.date>=@date1 AND purchase.date<=@date2
GROUP BY
    purch_details.purch_id,
    purch_details.purch_price,
    purchase.date

上述 SQL 的问题在于它返回的行具有重复的 product_id。

【问题讨论】:

您使用的是哪个 DBMS? 【参考方案1】:

我认为这应该可行:

;WITH CTE AS
(
    SELECT purch_details.purch_id,
           purch_details.purch_price,
           purchase.date,
           ROW_NUMBER() OVER(PARTITION BY purch_details.purch_id 
                                 ORDER BY purchase.date DESC) RN
    FROM purchase 
    INNER JOIN purch_details 
    ON purchase.purch_id=purch_details.purch_id
    WHERE purchase.date BETWEEN @date1 AND @date2
)
SELECT purch_id,
       purch_price,
       [date]
FROM CTE
WHERE RN = 1; 

【讨论】:

SQL 无法编译。它说关键字'ON'附近的语法不正确

以上是关于SQL从弱采购明细表中获取产品的最后采购价格的主要内容,如果未能解决你的问题,请参考以下文章

采购单构思设计

sql 采购订单明细

sql 采购订单明细

sql 采购订单明细

模块分析总结

042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中