我有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
答案 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)
第一个似乎是正确的,会给你最大日期和没有匹配的空值,虽然你不会在表p中得到p_id的结果而不是表p2l
这个非常有趣,它假设l_id在l表中不是唯一的。并删除了没有连接的p_id。但是这个选择max的额外声明是开销,并没有增加太多。
获取所有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