SQL查询:对值求和

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

我有一个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和(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;