SQL - 返回包含多对多表的最大日期

时间:2013-02-20 08:40:41

标签: mysql sql

我有3个表:p,p2l,l

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

如何获得每个p_id的最大值(日期)?

这个查询是否正确?

1

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

2

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 

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

  1. 第一个似乎是正确的,会给你最大日期和没有匹配的空值,虽然你不会在表p中得到p_id的结果而不是表p2l

  2. 这个非常有趣,它假设l_id在l表中不是唯一的。并删除了没有连接的p_id。但是这个选择max的额外声明是开销,并没有增加太多。

  3. 获取所有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