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

编写SQL查询:从booking与shipment_log表获取订单的价格、收发地址及价格差异

解决方案

没问题,我来帮你搞定这个SQL查询需求~先理清楚核心逻辑:我们需要从booking表拿订单的基础价格,再关联shipment_log表获取运单的取送货地点,还要计算价格差异。不过有个小细节,你给出的shipment_log表结构里没包含价格相关字段,但题目说运单更新记录存在这个表,所以我默认shipment_log里有个updated_price字段存更新后的价格(要是实际字段名不一样,你直接替换就行)。

最终SQL查询语句

SELECT
    b.booking_id,
    b.price AS original_price,
    -- 拼接成完整的取货地点(城市+州)
    CONCAT(sl.pickup_city, ', ', sl.pickup_state) AS pickup_location,
    sl.delivery_city AS delivery_location,
    -- 计算价格差异:更新后价格减去原订单价格,无更新记录则显示NULL
    sl.updated_price - b.price AS price_difference
FROM
    booking b
LEFT JOIN
    shipment_log sl ON b.booking_id = sl.booking_id
-- 可选:如果一个订单有多条更新记录,取最新的那一条
-- QUALIFY ROW_NUMBER() OVER (PARTITION BY b.booking_id ORDER BY sl.log_id DESC) = 1;

关键细节说明

  • 关联方式选择:用LEFT JOIN是为了保证所有订单都能被返回,哪怕某个订单还没有任何更新记录(这种情况下取货地点、送货地点和价格差异会显示为NULL)。
  • 取货地点格式化:用CONCAT把城市和州拼接成更易读的完整地址,你可以根据需求调整分隔符(比如改成空格或者其他格式)。
  • 价格差异逻辑:如果shipment_log里的价格字段不是updated_price,记得替换成实际的字段名;要是业务里价格差异的计算逻辑不同(比如原价格减更新后价格),直接调整减法顺序就行。
  • 多更新记录处理:如果一个订单有多次更新,上面的查询会返回所有历史记录。要是只需要最新的一条更新信息,把注释里的窗口函数语句去掉注释就行(log_id是自增主键的话,按它倒序取第一条就是最新记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:52:35