2015-06-29 143 views
1

在我們的數據庫中我們有地址,服務和任務。簡化的,我們的數據是這樣的:選擇最大行(時間戳)

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

的問題是,多個任務同時啓動,所以我隨機加入與正確的開始任何任務,但它不能保證它真正屬於我的地址。任何提示/輸入都非常受歡迎。

回答

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