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

如何编写SQL按日期范围筛选客户购买前后关联的支持工单数据

按日期、客户维度关联提取数据的SQL实现方案

完全可以通过SQL实现该需求,核心是基于客户ID做两表关联,再通过日期区间判断筛选符合时间要求的工单数据。

前提表结构约定

  • 表1:客户购买记录表purchase_records,核心字段如下
    • customer_id:客户唯一标识(关联用字段,比姓名更准确可避免重名问题)
    • customer_name:客户姓名
    • purchase_date:客户购买商品的日期(DATE/DATETIME类型)
    • 其余商品、金额等购买相关字段可按需查询
  • 表2:客户支持工单表ticket_records,核心字段如下
    • customer_id:客户唯一标识(和购买表做关联的匹配字段)
    • ticket_submit_time:工单提交时间(DATE/DATETIME类型)
    • 其余工单编号、问题类型等工单相关字段可按需查询

核心实现逻辑

两表通过customer_id关联,筛选工单提交时间落在「对应客户某笔购买日期前10天 - 购买日期后10天」区间内的记录即可。如果同一客户有多笔购买记录,工单只要匹配任意一笔购买的时间窗口就会被提取,加DISTINCT可避免同一工单匹配多笔购买时重复返回。

可直接复用的SQL代码

MySQL版本

SELECT
  DISTINCT t.* -- 替换成实际需要返回的字段即可,如需关联展示购买信息可加上p.开头的对应字段
FROM
  ticket_records t
INNER JOIN
  purchase_records p
  ON t.customer_id = p.customer_id
  -- 时间区间判断,可根据实际天数要求调整INTERVAL后的数值
  AND t.ticket_submit_time BETWEEN DATE_SUB(p.purchase_date, INTERVAL 10 DAY)
                               AND DATE_ADD(p.purchase_date, INTERVAL 10 DAY);

其他数据库适配提示

  • PostgreSQL:将日期计算部分替换为p.purchase_date - INTERVAL '10 days'和p.purchase_date + INTERVAL '10 days'
  • SQL Server:将日期计算部分替换为DATEADD(day, -10, p.purchase_date)和DATEADD(day, 10, p.purchase_date)
  • Oracle:将日期计算部分替换为p.purchase_date - 10和p.purchase_date + 10即可

注意事项

  • 若业务需要排除周末、法定节假日计算10天窗口,需要额外搭配日历表关联计算工作日,不能直接用自然日加减
  • 若不需要去重(比如需要同时返回工单和对应匹配的每一笔购买记录),去掉DISTINCT关键字即可
  • 建议给customer_id、purchase_date、ticket_submit_time字段加索引,数据量大时查询速度会明显提升

逻辑验证参考:客户Bob在2022年6月1日有螺丝刀购买记录,上述SQL会自动圈定2022年5月22日至2022年6月11日的自然日时间窗口,如果需要匹配示例中提到的2022年5月21日至2022年6月10日窗口,调整INTERVAL后的天数为对应数值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:42:22