在我们的数据库中,我们有地址、服务和任务。简化后,我们的数据如下:

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/

10-11 08:45