Mysql group by中的最高条目,并使用having将其与另一个值进行比较

Mysql group by中的最高条目,并使用having将其与另一个值进行比较,mysql,sql,optimization,max,having,Mysql,Sql,Optimization,Max,Having,这就是我想要的: 查看从同一FK创建的最高值是否超过X天 这是数据的结构(这不是下面查询的结果): 表1 id | FK_table_2 | created ------------------------------------------------------- 1 | 20 | 2013-11-12 12:13:14 2 | 20 | 2013-

这就是我想要的:

查看从同一FK创建的最高值是否超过X天

这是数据的结构(这不是下面查询的结果):

表1

id     |      FK_table_2      |     created
-------------------------------------------------------
1      |      20              |     2013-11-12 12:13:14
2      |      20              |     2013-11-12 11:10:12
3      |      21              |     2013-10-02 12:53:20
4      |      21              |     2013-09-02 12:54:20
注意:执行子查询将非常缓慢

我想到的是:

SELECT *
FROM table_1
GROUP BY FK_table_2
HAVING MAX(created) < NOW() - INTERVAL 3 DAY
选择*
来自表1
按FK_表_2分组
最大(已创建)
我担心MAX(created)没有让garantuee使用最高的created


还有其他方法吗?

我认为您不需要使用MAX子句,您当然可以选择所有超过3天的行并对它们进行处理

SELECT DISTINCT FK_table_2 FROM table_1
WHERE created > NOW() - INTERVAL 3 DAY;
更新此选项无效:-(

尝试此选项

SELECT FK_table_2,max(created)
FROM table_1
where created < NOW() - INTERVAL 3 DAY
GROUP BY FK_table_2
选择FK_表2,最大值(已创建)
来自表1
创建位置
你很担心吗?你没试过吗?结果似乎不错,但要100%确定,数据太多了。如果你必须将你的
id
添加到输出中,这是基于
选择*
你应该做的,那么该查询是不正确的。你期望的表格格式的输出是什么?上面的表1不是输出,而是数据库data.问题是,包含旧create的组将匹配。假设是1分钟,而不是3天。然后,如果时间是12:54:21,FK 21将匹配。据我所知,GROUP BY应用于WHERE之前,因此创建的组可以是在同一FK组中创建的任何组。这是查询执行的顺序1.从第2条开始。WHERE第3条GROUP BY cl原因4.拥有第5条。选择第6条。按顺序,这可能是正确的。但是WHERE将匹配旧条目,这将导致结果错误。WHERE子句将按3的间隔筛选日期,而不是对该数据执行max。