在我们的数据库中,我们有地址,服务和任务。简化后,我们的数据如下所示:
Adress:
id
name
Service:
id
Address_id
Mission:
id
start
Service_id
我努力实现的目标是获取每个地址最后开始的Mission任务。每个地址都可以在多个服务中,每个服务可以有多个任务。我尝试了许多不同的方法,但没有一种方法有效。我的最新尝试:
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().")
问题是,多个任务同时开始,所以我随机加入任何正确开始的任务,但不能保证它真的属于我的地址。任何提示/输入都非常受欢迎。
答案 0 :(得分:1)
对于您正在使用的方法,我认为您需要相关子查询。我认为逻辑是:
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()."
);