在我们的数据库中,我们有地址、服务和任务。简化后,我们的数据如下:
Adress:
id
name
Service:
id
Address_id
Mission:
id
start
Service_id
我试图实现的是获取每个地址最后开始的任务的Mission.id。每个地址可以在多个服务中,每个服务可以有多个任务。我尝试了很多不同的方法,但都没有奏效。我最近的一次尝试:
SELECT
a.id AS addressID,
m.id AS missionID
FROM Address AS a
JOIN Service AS s ON s.Address_id = a.id
JOIN Mission AS m ON m.Service_id = s.id AND m.start = (SELECT MAX(start) FROM Mission WHERE start < ".time().")
问题是,多个任务同时开始,所以我随机加入任何有正确开始的任务,但不能保证它真的属于我的地址。欢迎任何提示/意见。
最佳答案
我想您需要一个相关的子查询,用于您正在使用的方法。我认为逻辑是:
SELECT a.id AS addressID, m.id AS missionID
FROM Address a JOIN
Service s
ON s.Address_id = a.id JOIN
Mission m
ON m.Service_id = s.id
WHERE m.start = (SELECT MAX(m2.start)
FROM Mission m2 JOIN
Service s2
ON m2.Service_Id = s2.id
WHERE s2.Address_Id = s.AddressId AND
m2.start < ".time()."
);
关于php - 选择具有MAX(时间戳)的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31113611/