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 joinjoin 的同义词,这只是一种编码风格。 我不明白的是,子查询中的“where iv1.attr = iv.attr”是如何工作的。为什么我不能在外面定义这个? @Lyaso:外部查询无法“看到”子查询内部。同时,子查询可以访问外部查询的值。因此关联发生在子查询中,并将正确的值返回给外部查询。

以上是关于sql查询最新日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询获取特定日期和列中最新日期之间的数据

查找 sql 查询以获取每个分组的最新关联日期

有关给定日期的sql查询,如果不存在,请提供最新日期

SQL查询返回列更改时的最新日期

SQL查询以逐块获取最新数据

SQL 查询 - 组合两个表,删除重复项并仅保留最新的日期