选择MAX行(时间戳)

时间:2015-06-29 10:41:14

标签: php mysql

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

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().")

问题是,多个任务同时开始,所以我随机加入任何正确开始的任务,但不能保证它真的属于我的地址。任何提示/输入都非常受欢迎。

1 个答案:

答案 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()."
                );