SQL中group by分组中如何在有2个字段值不同的情况下只按其中一个来取数

表:
ID name value time
1 A 3 2018-1-1
1 A 4 2018-4-4
2 B 6 2018-1-2
3 C 7 2018-1-3
3 C 9 2018-4-6

如何按照ID分组,并且只取相同ID和name下时间(time)最近的值:

如:

ID name value time
1 A 4 2018-4-4
2 B 6 2018-1-2
3 C 9 2018-4-6

阅读 7.8k
2 个回答

pg如果不支持分区函数的话,就多关联几次表吧,如:

select id, name, time, max(value)
from t inner join (
select id, name, max(time) as max_time
from t
group by id, name
) t1 on t.id = t1.id and t.name = t1.name and t.time=t1.max_time
group by id, name, time
新手上路,请多包涵

select * from(
select id, name, value,ROW_NUMBER() OVER(PARTITION BY a.id,name ORDER BY a.time DESC) as num
from table a
) b
where b.num = 1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题