3

我希望能够返回名为“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。

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

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

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

2 回答 2

1

您可以使用 来执行此操作order by,而无需使用max()

SELECT completed_on, completed_by, completed_on AS completed_on 
FROM activity
WHERE activity_code = 5
ORDER BY completed_on desc
LIMIT 1;
于 2013-09-06T20:18:44.337 回答
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)

小提琴演示

于 2013-09-06T20:35:17.260 回答