2013-02-20 48 views
0

我有3個表:P,P2L,LSQL - 與許多返回最大日至多個表

p - p_id; 
p2l - p_id, l_id 
l - l_id, date 

我如何獲得最大的(日期)每個的p_id?

這個查詢是否正確?

SELECT plot_id, max(l.date) as l_maxDate 
FROM p2l 
LEFT JOIN l ON p2l.l_id = l.l_id 
Group by p_id 
SELECT plot_id, maxDate.maxLDate, 
FROM p2l 
INNER JOIN 
    (SELECT l_id, MAX(date) AS maxLDate 
    FROM l 
    GROUP BY l_id) maxDate 
ON maxDate.l_id = p2l.l_id 
GROUP BY p_id 
+0

您最大日期指的是什麼最新的日期? – 2013-02-20 08:43:30

回答

0
SELECT p.p_ID, MAX(l.date) max_date 
FROM p 
     INNER JOIN p2l 
      ON p.p_id = p2l.p_ID 
     INNER JOIN l 
      ON p2l.l_id = l.l_id 
GROUP BY p.p_ID 

,但如果你不想從表p的記錄。你可以從連接中刪除該表。

SELECT p2l.p_ID, MAX(l.date) max_date 
FROM p2l 
     INNER JOIN l 
      ON p2l.l_id = l.l_id 
GROUP BY p2l.p_ID 
0
  1. 第一個似乎是正確的,會給你最大的日期和空對沒有比賽,但你不會得到表P的p_id的結果,而不是在表P2L

  2. 這一個非常有趣,它假定l_id在l表中不是唯一的。並且在沒有連接的情況下刪除p_id。但是這個額外的語句選擇最大值是開銷,並且不會增加太多。

要獲得所有的p_id(包括那些沒有鏈接,您務必做好)

SELECT p.p_ID, MAX(l.date) max_date 
FROM p 
     LEFT JOIN p2l 
      ON p.p_id = p2l.p_ID 
     LEFT JOIN l 
      ON p2l.l_id = l.l_id 
GROUP BY p.p_ID