2013-02-20 50 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