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

如何使用SQL查询各客户的倒数第二笔订单日期

查询每个客户的倒数第二笔订单日期

现有数据

Customers表包含字段:客户ID(C.id)、产品类型(product)、订单日期(Order_Date),原始数据如下:

C.idproductOrder_Date
1pens2023-01-09
2books2022-10-01
2books2022-07-09
3toys2022-06-10
3books2022-05-05
3books2022-04-04

错误尝试

尝试使用以下SQL查询:

SELECT c.id,product, min(Order_date) FROM customers  Where product = books Group by c.id;

得到的错误结果:

C.idproductOrder_Date
2books2022-10-01
3books2022-05-05

期望结果

需要获取每个客户的倒数第二笔订单日期,正确结果应为:

C.idproductOrder_Date
2books2022-07-09
3toys2022-06-10

正确SQL实现

使用窗口函数ROW_NUMBER()按客户分组,订单日期倒序排序,筛选排序序号为2的记录(即倒数第二笔订单):

SELECT id, product, Order_Date
FROM (
    SELECT 
        C.id,
        product,
        Order_Date,
        ROW_NUMBER() OVER (PARTITION BY C.id ORDER BY Order_Date DESC) AS rn
    FROM customers
) t
WHERE rn = 2;

逻辑说明

  1. 内层查询通过PARTITION BY C.id按客户分组,ORDER BY Order_Date DESC将每个客户的订单按日期从新到旧排序,ROW_NUMBER()为每条记录分配序号,最新订单序号为1,倒数第二订单序号为2。
  2. 外层查询筛选序号为2的记录,直接得到每个客户的倒数第二笔订单数据。
  3. 该方法适配支持窗口函数的主流数据库(如MySQL 8+、PostgreSQL、SQL Server等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:05:21