我有这两个表。
UserProfiles(userid, attr , value)
InformationValues(attr , dateOfValue, price)
表内容:
userid ='ann'的用户个人资料
信息值
现在,我必须为每个attr选择最新日期,并计算出用户名“ ann”具有的每个attr的价格之和。
那么最后一个日期的每个attr价格的用户ID“ ann”的总价将为3,2。
到目前为止我有什么
select sum(iv.price * (count(distinct(u.attr))))
from userprofiles u , informationvalues iv
where iv.attr = u.attr and u.userid ='ann'
and iv.dateofvalue = (select max(dateofvalue) from informationvalues)
我不知道要为用户ID“ Ann”获得3.2值是什么。
答案 0 :(得分:1)
您需要将子查询与外部查询进行关联,以便为每个属性提供最新日期 ,而不是总的最新日期。
我也不知道为什么需要在外部查询中使用count(distinct ...)
进行计算。
旁注:始终使用现代的标准联接语法(带有on
关键字),而不是隐式联接(在from
子句中带有逗号)。
我建议:
select sum(iv.price) total_price
from userprofiles u
inner join informationvalues iv on iv.attr = u.attr -- standard join syntax
where
u.userid ='ann'
and iv.dateofvalue = (
select max(iv1.dateofvalue)
from informationvalues iv1
where iv1.attr = iv.attr -- correlation
)