SQL查询:对值求和
我有一个userprofile表:SQL查询:对值求和,sql,oracle,Sql,Oracle,我有一个userprofile表: **userid attr** jack swimming jack fishing maria football maria fishing maria climbing 属性的值表(显示最新日期的值) 我想要一个给定的userprofile的总值。 userprofile的总值是使用最新值计算的。 例如,来自maria=8,5的userprofile的总值(1,5+3+4) 我已经试过了: 选择u
**userid attr**
jack swimming
jack fishing
maria football
maria fishing
maria climbing
属性的值表(显示最新日期的值)
我想要一个给定的userprofile的总值。
userprofile的总值是使用最新值计算的。
例如,来自maria=8,5的userprofile的总值(1,5+3+4)
我已经试过了:
选择u.userid和(a.value)
从userprofile u,属性a
其中u.attr=a.attr和u.userid='maria'
按u.userid分组
但这不能正常工作…您可以使用窗口函数确定最近的值,然后进行聚合:
select up.userid, sum(a.value)
from (select a.*,
row_number() over (partition by attr order by dateofvalue desc) as seqnum
from attributes a
) a join
userprofiles up
on a.attr = up.attr and a.seqnum = 1
group by up.userid;
可以使用窗口函数确定最近的值,然后聚合:
select up.userid, sum(a.value)
from (select a.*,
row_number() over (partition by attr order by dateofvalue desc) as seqnum
from attributes a
) a join
userprofiles up
on a.attr = up.attr and a.seqnum = 1
group by up.userid;