sql查询最新日期

时间:2020-03-23 22:35:42

标签: sql group-by subquery max greatest-n-per-group

我有这两个表。

UserProfiles(userid, attr , value)
InformationValues(attr , dateOfValue, price)

表内容:

userid ='ann'的用户个人资料

enter image description here

信息值

enter image description here

现在,我必须为每个attr选择最新日期,并计算出用户名“ ann”具有的每个attr的价格之和。

enter image description here

那么最后一个日期的每个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值是什么。

1 个答案:

答案 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
    )