sql查询最新日期
Posted
技术标签:
【中文标题】sql查询最新日期【英文标题】:sql query about latest date 【发布时间】:2020-07-04 10:37:10 【问题描述】:我有这两张桌子。
UserProfiles(userid, attr , value)
InformationValues(attr , dateOfValue, price)
表格内容:
userid ='ann' 的用户配置文件
信息价值
现在我必须为每个 attr 选择最新日期并计算用户 ID '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 时缺少什么。
【问题讨论】:
【参考方案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
)
【讨论】:
感谢您的解决方案,您能否详细说明为什么使用“内部”联接而不是联接? @Lyaso:欢迎。inner join
是 join
的同义词,这只是一种编码风格。
我不明白的是,子查询中的“where iv1.attr = iv.attr”是如何工作的。为什么我不能在外面定义这个?
@Lyaso:外部查询无法“看到”子查询内部。同时,子查询可以访问外部查询的值。因此关联发生在子查询中,并将正确的值返回给外部查询。以上是关于sql查询最新日期的主要内容,如果未能解决你的问题,请参考以下文章