You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并Sales与Price_History表生成含Price_at_Date的Revenue视图SQL实现

实现SQL代码

通用版本(支持窗口函数的主流数据库:MySQL8.0+/PostgreSQL/SQL Server/Oracle)

CREATE VIEW Revenue AS
SELECT
    s.Product_Name,
    s.Qty AS Sale_Qty,
    s.Sales_Date,
    ph.Price AS Price_at_Date
FROM (
    SELECT
        s.Product_Name,
        s.Qty,
        s.Sales_Date,
        ph.Price,
        -- 同笔销售记录的所有匹配价格按变更日期倒序排名
        ROW_NUMBER() OVER (
            PARTITION BY s.Product_Name, s.Sales_Date, s.Qty
            ORDER BY ph.Price_Change_Date DESC
        ) AS rank_num
    FROM Sales s
    -- 匹配同产品、销售日期前的所有价格记录
    LEFT JOIN Price_History ph
        ON s.Product_Name = ph.Product_Name
        AND ph.Price_Change_Date <= s.Sales_Date
) AS temp
-- 取最近一次的价格记录
WHERE temp.rank_num = 1;

低版本MySQL兼容版(无窗口函数支持场景)

CREATE VIEW Revenue AS
SELECT
    s.Product_Name,
    s.Qty AS Sale_Qty,
    s.Sales_Date,
    (
        SELECT ph.Price
        FROM Price_History ph
        WHERE ph.Product_Name = s.Product_Name
          AND ph.Price_Change_Date <= s.Sales_Date
        ORDER BY ph.Price_Change_Date DESC
        LIMIT 1
    ) AS Price_at_Date
FROM Sales s;

注意:若某笔销售的日期早于对应产品的所有价格变更记录,Price_at_Date会返回NULL,可根据业务需要添加COALESCE函数设置默认兜底价格,或添加过滤条件剔除这类无效数据。

内容的提问来源于stack exchange,提问作者Asad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:36:04