繁体   English   中英

如何按日期比较记录并仅返回符合条件的记录?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM