0

我有 3 个表:p、p2l、l

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

如何获得每个 p_id 的 max(date)?

这个查询是否正确?

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 
4

2 回答 2

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

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

获取所有 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
于 2013-02-20T08:47:28.260 回答
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

但如果你不想要 table 中的记录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
于 2013-02-20T08:42:54.233 回答