需要查找具有多个条件的重复项,然后比较重复项之间的日期

时间:2015-09-03 00:34:25

标签: mysql duplicates

我正在将年度会员注册写入单个数据库表。我需要跟踪上次更新后不到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,这是我需要评估的续订日期。我想添加类似“AND Date - Date< 335”的内容 335是天数,短于一年约1个月。但我只是不断收到语法错误,因为我显然不知道自己在做什么。

1 个答案:

答案 0 :(得分:0)

Date arithmetic在MySQL中运行良好;你需要诀窍。

您可以说

之类的内容
    AND later.Date >= earlier.Date
    AND later.Date < earlier.Date + INTERVAL 11 MONTH

如果较晚的日期发生在较早日期和11个月之后的时间范围内,那么这一对比较就会出现。

一般来说,你可以说这样的东西做日期算术。

   datestamp + INTERVAL 1 HOUR
   datestamp - INTERVAL 5 MINUTE
   datestamp + 1 MONTH - 3 WEEK
   datestamp - INTERVAL 3 QUARTER  (calendar quarters)
   LAST_DAY(datestamp) + INTERVAL 1 DAY - INTERVAL 1 MONTH

最后一项是包含日期戳的月份的第一天。整个日期的事情很有效。

我认为您应该考虑使用所谓的self-join查询来获取重复的除日期结果。尝试这样的事情。

 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