我正在将年度会员注册写入单个数据库表。我需要跟踪上次更新后不到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个月。但我只是不断收到语法错误,因为我显然不知道自己在做什么。
答案 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