识别重复付款

cotxawn7  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(318)

我的付款表如下:
内径(11)
客户id int(11)
句点类型varchar(255)
州varchar(255)
开始于日期
截止日期
退款id int(11)
每个客户都有不同的付款期,如下所示
period类型=('monthly'、'fourweekly'、'weekly'、'yearly'、'fortwilly'、'bianually'、'quarterly')开始于是时段的开始,结束于时段的结束。
我应该能够识别重复付款,以便退还金额,然后删除重复的一个。如果有其他付款涵盖同一付款期或部分付款期且不在付款期内,则付款重复 state='refunded' .
示例:
客户a有2笔付款,从(1月1日开始)到(1月31日结束),都处于“已投资”状态,这些付款应选择为重复付款
客户b在1月1日至1月31日期间有2笔付款,一笔在state='returned'中,另一笔在state='invested'中,不应选择这些付款。
客户c有2笔付款,一笔从1月1日到1月31日,另一笔从1月6日到2月5日,这两笔付款都在“已投资”状态,这些付款应选择为重复付款。请让我知道如果我需要提供更多的信息。

fae0ux8s

fae0ux8s1#

这应该管用,试试看,如果不能涵盖所有案例,我们会解决:

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)))

相关问题