php - 选择具有 MAX(timestamp) 的行

标签 php mysql

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

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(timestamp) 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31113611/

相关文章:

php - nohup :ignoring input and appending output to 'nohup.out'

php - Mysql 从 table1 中选择,其中 row1 等于 table2 中的 row1 在 php 中?

mysql - 将 Grails 与 PostgreSQL 一起使用时出现 org.hibernate.StaleObjectStateException

php while循环不正确地显示sql数据

php - 是否有一种使用 PHP 发布到 Twitter 而无需管理用户登录或获取推文的简单方法?

php - 以图形方式创建和管理文档结构的应用程序

PHP输出json

javascript - 从 jQuery 设置 cookie 并从 php 读取的正确方法

MySql:优化查询

MySQL : How to select record where begin date and end date between two dates of mysql