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

求助:编写含3个月取款排除条件的合伙人月度奖金计算SQL脚本

合作伙伴月度奖金计算SQL实现

核心逻辑

奖金计算公式为:(有效存款总额 - 符合扣减条件的取款总额) * 0.5%,其中符合扣减条件的取款指取款时间与对应存款时间间隔≤3个月的取款记录。

假设数据表结构

基于业务场景,假设存在以下基础表:

  • partners:partner_id(主键)、partner_name(合作伙伴名称)
  • customers:customer_id(主键)、partner_id(关联所属合作伙伴)
  • deposits:deposit_id(主键)、customer_id(关联客户)、amount(存款金额)、deposit_date(存款日期)
  • withdrawals:withdrawal_id(主键)、customer_id(关联客户)、amount(取款金额)、withdrawal_date(取款日期)、deposit_id(关联对应的存款记录)

SQL脚本(以MySQL为例)

SELECT
  p.partner_id,
  p.partner_name,
  DATE_FORMAT(d.deposit_date, '%Y-%m') AS bonus_month,
  SUM(
    (d.amount - COALESCE(SUM(CASE WHEN TIMESTAMPDIFF(MONTH, d.deposit_date, w.withdrawal_date) <= 3 THEN w.amount ELSE 0 END), 0)) * 0.005
  ) AS monthly_bonus
FROM deposits d
LEFT JOIN withdrawals w ON d.deposit_id = w.deposit_id
JOIN customers c ON d.customer_id = c.customer_id
JOIN partners p ON c.partner_id = p.partner_id
GROUP BY p.partner_id, p.partner_name, DATE_FORMAT(d.deposit_date, '%Y-%m')
ORDER BY bonus_month, p.partner_id;

脚本说明

  1. 关联表与筛选有效取款:通过LEFT JOIN关联存款和对应的取款记录,用TIMESTAMPDIFF计算月份间隔,仅保留间隔≤3个月的取款金额用于扣减。
  2. 处理空值:用COALESCE确保无对应取款的存款记录不会因NULL值导致计算错误。
  3. 分组汇总:按合作伙伴和存款所在月份分组,计算每组的月度奖金总额。

适配其他数据库的调整

  • PostgreSQL:将TIMESTAMPDIFF(MONTH, d.deposit_date, w.withdrawal_date)替换为DATE_PART('month', age(w.withdrawal_date, d.deposit_date)),DATE_FORMAT替换为TO_CHAR(d.deposit_date, 'YYYY-MM')。
  • SQL Server:将TIMESTAMPDIFF(MONTH, d.deposit_date, w.withdrawal_date)替换为DATEDIFF(month, d.deposit_date, w.withdrawal_date),DATE_FORMAT替换为FORMAT(d.deposit_date, 'yyyy-MM')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:25:24