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

基于客户ID统计两日期区间内的订单数量问题

按Customer_ID统计指定日期区间内的订单数量解决方案

核心思路

先从TableA中提取每个客户的最近两条记录的日期区间(上一条记录日期为起始,最后一条记录日期为结束),再关联TableB统计该区间内的订单数量。

分步实现SQL

1. 提取每个客户的目标日期区间

使用窗口函数ROW_NUMBER()对每个客户的记录按日期倒序排序,筛选出最新记录;再用LAG()函数获取该客户上一条记录的日期,形成统计区间:

WITH customer_date_intervals AS (
    SELECT 
        customer_id,
        -- 获取上一条记录的日期作为区间起始
        LAG(record_date) OVER (PARTITION BY customer_id ORDER BY record_date) AS interval_start,
        -- 最新记录的日期作为区间结束
        record_date AS interval_end
    FROM (
        SELECT 
            customer_id,
            record_date,
            -- 按客户分组,日期倒序排名,rn=1为最新记录
            ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY record_date DESC) AS record_rank
        FROM TableA
    ) ranked_records
    WHERE record_rank = 1 -- 仅保留每个客户的最新记录
)

2. 关联TableB统计区间内订单数

将上述日期区间结果与TableB关联,筛选订单日期落在区间内的数据,按客户分组统计数量:

SELECT 
    cdi.customer_id,
    COUNT(b.order_id) AS interval_order_count
FROM customer_date_intervals cdi
LEFT JOIN TableB b 
    ON cdi.customer_id = b.customer_id
    -- 筛选订单日期在目标区间内的记录
    AND b.order_date BETWEEN cdi.interval_start AND cdi.interval_end
GROUP BY cdi.customer_id;

针对示例的说明

对于customer_id=13,上述SQL会自动提取其区间为2022-11-17 05:36:19至2022-11-21 06:22:08,并统计TableB中该区间内的订单数(示例中返回3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:50:33