Mysql 需要找到具有多个条件的副本,然后比较副本之间的日期

Mysql 需要找到具有多个条件的副本,然后比较副本之间的日期,mysql,duplicates,Mysql,Duplicates,我正在将年度会员登记写入一个db表。我需要记录上次续约后不到11个月内续约的时间 我根据多个条件查找重复的行。我目前已经制定了11个月的标准,尽管速度很慢。这是我目前使用的 SELECT y_reg.* FROM y_reg WHERE (((y_reg.season) In (SELECT season FROM y_reg As Tmp GROUP BY season, Father_Last_Name, Father_First_Name HAVING Coun

我正在将年度会员登记写入一个db表。我需要记录上次续约后不到11个月内续约的时间

我根据多个条件查找重复的行。我目前已经制定了11个月的标准,尽管速度很慢。这是我目前使用的

    SELECT y_reg.* FROM y_reg WHERE (((y_reg.season) In (SELECT season FROM y_reg As Tmp 
    GROUP BY season, Father_Last_Name, Father_First_Name 
    HAVING Count(*)>1  
    AND Father_Last_Name = y_reg.Father_Last_Name 
    AND Father_First_Name = y_reg.Father_First_Name))) 
    ORDER BY y_reg.season, y_reg.Father_Last_Name, y_reg.Father_First_Name
我有一个字段日期,它是我需要评估的续约日期。我想添加一些类似于和Date-Date<335的内容 335是天数,大约比一年少1个月。但我只是不断出现语法错误,因为我显然不知道自己在做什么。

在MySQL中运行得很好;你需要的只是诀窍

你可以这样说

    AND later.Date >= earlier.Date
    AND later.Date < earlier.Date + INTERVAL 11 MONTH
最后一项是包含日期戳的月份的第一天。整个约会过程都很顺利

我认为你应该考虑一个所谓的查询来获得你的副本,除了日期结果。试试这样的

 SELECT a.* 
   FROM y_reg a
   JOIN y_reg b   ON a.Father_Last_Name = b.Father_Last_Name
                 AND a.Father_First_Name = b.Father_First_Name
                 AND b.Date <  a.Date - 11 MONTH
                 AND b.Date >= a.Date - 12 MONTH

谢谢与我原来的选择相比,新的选择是闪电般的快。它似乎返回单个记录,可能是因为a和b有相同的记录。我只需要在匹配计数大于1时显示它们。然后点最后一个,第一个。其中Count*>1组按父姓排列,父姓,但由于未正确使用group和count而出现语法错误。我到目前为止没有语法错误,请选择Previous。*从y\u reg previous加入y\u reg previous.Father\u Last\u Name=later.Father\u Last\u Name和previous.Father\u First\u Name=later.Father\u First\u Name和later.Date=previous.Date-间隔12个月按父亲姓氏分组,父亲姓氏计数*>1顺序按早年、早年、父亲姓氏,早些时候。父名仍然只返回单行,没有返回dup,而不是像原来那样两个或多个dup紧挨着。我仍然坚持这一行。我只返回一行副本。我需要它们全部显示,以便用户可以决定删除哪一个。我需要在输出中显示所有重复的行。似乎添加任何类型的和b.Date=a.Date-12个月都会导致不返回原始行。有没有一种方法可以在不过滤输出中匹配的重复项的情况下使用不同的日期标准?我在这篇文章中找不到解决方案。然而,我在这里提出了一个解决方案:[链接]
 SELECT a.* 
   FROM y_reg a
   JOIN y_reg b   ON a.Father_Last_Name = b.Father_Last_Name
                 AND a.Father_First_Name = b.Father_First_Name
                 AND b.Date <  a.Date - 11 MONTH
                 AND b.Date >= a.Date - 12 MONTH