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

时间:2019-03-16 08:30:20

标签: mysql sql

我有一个表,其中包含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)的两天前更新。

更新:

重复项不符合所有问题要求。因为我需要返回从当前日期起少于7天的每个具有update_at字段的记录的ID,所以不要将所有字段与另一个问题进行比较–

2 个答案:

答案 0 :(得分:1)

在7天前检查一下update_at>,而mysql没有sysdate,因此您使用CURDATE()

SELECT id FROM `team` WHERE update_at <= DATE_SUB(CURDATE(), Interval 7 Day)`

答案 1 :(得分:1)

如果我正确理解这一点,则您不希望知道表中的哪些ID没有最新更新。而是您有一组要获取此信息的ID。

这就是:

first-login-flow