我的付款表格如下:
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日,两个州都被投资'应将这些付款选为重复付款。 如果我需要提供更多信息,请告诉我。
答案 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)))