![](/img/trans.png)
[英]How to select only those records which are present in given all DATE range
[英]How to compare records by date and return only those match the condition?
我有一个包含teams
列表的表,每个team
都有一个名为update_at
的字段,用于指定上次更新的datetime
时间。
我需要检查每个team
是否需要更新。 首先,我创建了一个查询,例如:
SELECT update_at FROM team WHERE id = 67
然后将update_at
与7(这是一次更新与另一次更新之间的最大天数)进行比较。
该解决方案非常昂贵,因为如果我有50个teams
,则需要打开50个连接并执行50个query
。
所以我虽然这样:
SELECT id FROM `team` WHERE (id = 67 AND update_at > DATE_SUB(SYSDATE(), Interval 7 Day))
AND id = 68 AND update_at > DATE_SUB(SYSDATE(), Interval 7 Day))
这里的第一个问题是冗余,我不是sql
专家,所以我不知道是否有可能避免每次DATE_SUB(SYSDATE(), Interval 7 Day)
添加一次。
第二个问题是查询不返回任何内容。
表结构如下:
id | name | update_at
67 Tirana 2019-03-06 11:00:12
68 Partizan 2019-03-06 11:02:04
69 Lusitanos 2019-03-14 09:00:40
预期结果是67, 68
因为update_at
距离当前日期不到7天。 记录69仅在今天(2019-03-16)的2天前更新。
更新:
重复项不符合所有问题要求。 因为我需要返回每个具有update_at字段的记录的ID,该字段距当前日期少于7天,所以不要将所有字段与另一个问题进行比较–
只需在7天之前检查update_at>,并且mysql没有sysdate,那么您可以使用CURDATE()
SELECT id FROM `team` WHERE update_at <= DATE_SUB(CURDATE(), Interval 7 Day)`
如果我正确理解这一点,则您不希望知道表中的哪些ID没有最新更新。 确切地说,您具有要为其获取此信息的一组ID。
这就是:
SELECT id
FROM team
WHERE update_at < DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
AND id IN (10, 22, 34, 56 ...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.