我有两个看起来像这样的表:-
组件表
修订表
我想从该表中获取名称,model_id,rev_id,以便结果集具有如下所示的数据:-
name model_id rev_id created_at
ABC 1234 2 23456
ABC 5678 2 10001
XYZ 4567
此处数据按名称,model_id进行分组,并且每个组仅显示1个数据,这些数据具有created_at的最大值。
我正在使用以下查询,但结果不正确。
SELECT cm.name,cm.model_id,r.created_at from dummy.component cm
left join dummy.revision r on cm.model_id=r.model_id
group by cm.name,cm.model_id,r.created_at
ORDER BY cm.name asc,
r.created_at DESC;
结果:-
我们将不胜感激任何人的帮助。
答案 0 :(得分:1)
使用max and sub-query
select T1.name,T1.model_id,r.rev_id,T1.created_at from
(
select cm.name,
cm.model_id,
MAX(r.created_at) As created_at from dummy.component cm
left join dummy.revision r on cm.model_id=r.model_id
group by cm.name,cm.model_id
) T1
left join revision r
on T1.created_at =r.created_at
http://www.sqlfiddle.com/#!17/68cb5/4
name model_id rev_id created_at
ABC 1234 2 23456
ABC 5678 2 10001
xyz 4567
答案 1 :(得分:0)
在SELECT中,您缺少rev_id
尝试一下:
SELECT
cm.name,
cm.model_id,
MAX(r.rev_id) AS rev_id,
MAX(r.created_at) As created_at
from dummy.component cm
left join dummy.revision r on cm.model_id=r.model_id
group by 1,2
ORDER BY cm.name asc,
r.created_at DESC;
您所缺少的是说您只想要连接表中的最大记录的语句。因此,您需要联接记录,但是联接将引入表r中的所有记录。如果按组件中的2列分组,然后从r,id和创建日期中选择最大值,则只会从顶部选择要加入的行列
答案 2 :(得分:0)
我会使用distinct on
:
select distinct on (m.id) m.id, m.name, r.rev_id, r.created_at
from model m left join
revision r
on m.model_id = r.model_id
order by m.id, r.rev_id;