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

编写SQL查询:展示各order_id对应的同一客户下一笔订单ID

获取同一客户的下一笔订单ID的SQL实现

嗨,这个需求刚好是窗口函数的典型应用场景,用LEAD()函数就能完美解决,它专门用来抓取同一分组内的下一行数据。

直接可用的SQL查询

SELECT
    order_id,
    LEAD(order_id) OVER (
        PARTITION BY customer_id 
        ORDER BY order_date ASC
    ) AS next_order_id
FROM
    orders;

逐部分解释下这个语句

  • LEAD(order_id):这部分的作用是,在当前行所在的分组里,获取下一行的order_id值。如果当前行是该客户的最后一笔订单,这个字段就会返回NULL——毕竟没有下一笔订单了嘛。
  • PARTITION BY customer_id:把整个数据集按客户ID拆分成分组,这样我们只会在同一个客户的订单里找下一笔,不会跨客户乱匹配。
  • ORDER BY order_date ASC:在每个客户的分组里,按订单日期从小到大排序,确保我们拿到的是时间上真正的下一笔订单,而不是随便哪个后续的订单ID。

用你的示例数据测试下

你给的示例输入是:

order_idCustomer_idOrder_date
112017-11-01
222017-11-02
312017-11-03
422017-11-04

执行上面的查询后,会得到这样的结果:

order_idnext_order_id
13
3NULL
24
4NULL

如果想要输出结果和你给的示例一样按order_id排序(而不是按分组后的顺序),可以套一层子查询再排序:

SELECT
    order_id,
    next_order_id
FROM (
    SELECT
        order_id,
        LEAD(order_id) OVER (
            PARTITION BY customer_id 
            ORDER BY order_date ASC
        ) AS next_order_id
    FROM
        orders
) AS ordered_orders
ORDER BY order_id ASC;

这样输出就会严格按order_id从小到大排列啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:04:17