mysql - 如何通过 MySQL 返回基于上次事件日期的列值

标签 mysql

我希望能够返回名为“completed_by”的列的值,其中 completed_on 是最大值

我有下表

CREATE TABLE activity(
id int(11) AUTO_INCREMENT,
completed_on datetime,
completed_by int(11),
activity_code int(11)
)

如果我有

100, '2013-07-01 00:00:00', 11, 20
150, '2013-01-01 00:00:00', 12, 20

我想返回值 11。注意这里唯一给出的值是 activity_code。

逻辑应返回 completed_by 最后一次完成 activity_code = 20。我应该只返回 1 行

这是我所做的,但不确定这是否是一个好的查询,因为表事件有很多记录。

SELECT 
completed_by, 
MAX(completed_on ) AS completed_on 
FROM activity
WHERE activity_code = 5 LIMIT 1

最佳答案

一条记录的最大值:

SELECT * FROM activity 
WHERE activity_code = 20 
ORDER BY completed_on DESC LIMIT 1

所有事件代码的最大值:

SELECT * FROM activity a
WHERE NOT EXISTS(SELECT ID 
                 FROM activity b 
                 WHERE a.activity_code = b.activity_code 
                   AND b.completed_on > a.completed_on)

fiddle demo

关于mysql - 如何通过 MySQL 返回基于上次事件日期的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18665758/

相关文章:

mysql - 数字列中的 Asc 顺序

mysql - 是否可以查看数据库索引的底层树?

php - Mysql创建临时表并获取过滤后的数据

mysql加载数据文件与使用表

mysql - 从第二个表中的值减去一个表中的值 - 将结果设置为第二个表中的值

php - 来自同一用户表的复杂 Zend 查询

MySQL 多列子查询

MySql 查询合并来自 2 个表的结果

mysql - MySQL 中的 SQL 不同

mysql - 从字段中剥离空格后,Ruby/ActiveRecord 未检测到更改