确定重复付款

时间:2018-01-02 12:00:48

标签: mysql mysql-workbench

我的付款表格如下:

  

id int(11)

     

customer_id int(11)

     

period_type varchar(255)

     

state varchar(255)

     

starts_on date

     

ends_on date

     

refund_id int(11)

每位客户的付款期限如下

  

period_type   =('每月'' FourWeekly''每周''每年''每两周'&#39 ;每两年''季度')   starts_on是句点的开头,ends_on是结尾   周期。

我应该能够识别重复的付款,以便退还金额,然后删除重复的金额。 如果其他付款涵盖相同的付款期或部分付款期而非state='refunded',则付款会重复。

实施例

客户A从(START_on = 1月1日)到1月31日(1月31日结束时)有2次付款,状态均为' nvested'这些付款应该被选为重复的

客户B从1月1日至1月31日期间有2笔付款,其中一笔已退款='退款'而另一个国家='投资',这些付款不应该被选中。

客户C有2个付款,一个从1月1日到1月31日,另一个从1月6日到2月5日,两个州都被投资'应将这些付款选为重复付款。 如果我需要提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

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

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