Mysql 识别重复付款

Mysql 识别重复付款,mysql,mysql-workbench,Mysql,Mysql Workbench,我的付款表如下: id int11 客户id int11 周期\类型varchar255 州varchar255 从日期开始 截止日期 退款-国际身份证11 每个客户都有不同的付款期,如下所示 周期型 ='每月'、'四周'、'每周'、'每年'、'两周'、'半年'、'季度' Start_on是时段的开始,end_on id是时段的结束 句号 我应该能够识别重复付款,以便退还金额,然后删除重复付款。 如果有其他付款涵盖相同的付款期或部分付款期且未处于“退款”状态,则付款重复 示例: 客户A有2笔付款

我的付款表如下:

id int11

客户id int11

周期\类型varchar255

州varchar255

从日期开始

截止日期

退款-国际身份证11

每个客户都有不同的付款期,如下所示

周期型 ='每月'、'四周'、'每周'、'每年'、'两周'、'半年'、'季度' Start_on是时段的开始,end_on id是时段的结束 句号

我应该能够识别重复付款,以便退还金额,然后删除重复付款。 如果有其他付款涵盖相同的付款期或部分付款期且未处于“退款”状态,则付款重复

示例:

客户A有2笔付款,从1月1日开始到1月31日结束,均处于“已投资”状态。这些付款应选择为重复付款

客户B在1月1日至1月31日期间有2笔付款,一笔在“退款”状态,另一笔在“投资”状态,不应选择这些付款

客户C有2笔付款,一笔从1月1日到1月31日,另一笔从1月6日到2月5日,这两笔付款都处于“已投资”状态。这些付款应选择为重复付款。
如果我需要提供更多信息,请告诉我。

这应该有效,尝试一下,如果它不能涵盖所有情况,我们会解决:

SELECT customer_id,
       id,
       starts_on,
       period_type,
       state
FROM payments p
WHERE     state = 'invested'
      AND EXISTS
             (SELECT 1
              FROM payments
              WHERE     state != 'refunded'
                    AND customer_id = p.customer_id
                    AND id != p.id
                    AND (   (    starts_on <= p.starts_on
                             AND ends_on >= p.starts_on)
                         OR (starts_on <= p.ends_on AND ends_on >= p.ends_on)))

首先,你是如何得到重复付款的?与你的第一次尝试相结合,然后我们将帮助你感谢你Ed Heal,我想检查我们是否有重复付款,因为该应用程序生成所有开始和结束数据,我们据此向客户收费。谢谢你@theOni,我找不到解决方法,我这样做是为了查看上个月是否有重复付款选择customer\u id、countid payment、Start\u on、period\u type、,根据countid>1的客户id,从付款开始至当前日期-间隔1个月至当前日期,并在当前日期-间隔1个月至当前日期组结束