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

如何编写SQL查询检索过去6个月未付款的有效会员?

检索过去6个月未完成付款的会员SQL查询方案

原代码问题分析

原SQL无法实现需求的核心原因:

  • LEFT JOIN后通过WHERE过滤s.paidDate范围,会自动排除无付款记录的会员(s.paidDate为NULL时日期差条件不成立)
  • 条件DATEDIFF(NOW(), s.paidDate) > 180 AND <365是筛选过去6-12个月有付款记录的会员,与需求完全相反

正确查询方案

方法1:LEFT JOIN结合聚合函数(可查看会员最近付款时间)

SELECT e.*, MAX(s.paidDate) AS last_paid_date
FROM tbl_members e
LEFT JOIN tbl_paymgt s ON e.MemberID = s.memberID
WHERE e.MembershipStatus = 1
GROUP BY e.MemberID, e.MembershipStatus, e.其他会员字段名 -- 根据实际表字段补充,适配SQL模式
HAVING MAX(s.paidDate) < DATE_SUB(NOW(), INTERVAL 6 MONTH) 
   OR MAX(s.paidDate) IS NULL;
  • 使用DATE_SUB(NOW(), INTERVAL 6 MONTH)计算6个月前的日期,比固定180天更符合日历逻辑
  • HAVING子句覆盖两种未付款场景:从未产生付款记录,或最近一次付款在6个月之前

方法2:NOT EXISTS子查询(逻辑直观,性能更优)

SELECT *
FROM tbl_members e
WHERE e.MembershipStatus = 1
  AND NOT EXISTS (
    SELECT 1
    FROM tbl_paymgt s
    WHERE s.memberID = e.MemberID
      AND s.paidDate >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
  );
  • 直接排除过去6个月内有付款记录的会员,剩余结果即为符合需求的未付款会员

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:50:34