了解相关子查询

时间:2014-06-03 12:42:30

标签: sql sql-server database correlated-subquery

我想创建一个查询,该查询返回日期字段的最新日期和每个“评估”记录的整数字段的最高值。我认为需要的是相关子查询并使用MAX函数。

示例数据如下

日期字段可能具有每个评估的重复日期,但每个重复日期组在整数字段中将具有不同的整数。 例如

1256 2/6/14 0
1256 2/6/14 1
1256 1/6/14 0
4534 3/6/14 0
4534 3/6/14 1
4534 3/6/14 2

select assessment, Max(correctnum) maxofcorrectnum, dateeffect
from lraassm outerassm
where dateeffect =
    (select MAX(dateeffect) maxofdateeffect
    from pthdbo.lraassm innerassm
    innerassm.assessment = outerassm.assessment
    group by innerassm.assessment)
group by assessment, dateeffect

所以我的理论是内部查询执行并为外部查询提供外部查询中dateeffect字段的条件,然后外部查询将返回此dateeffect的correctnum字段的最大值,并返回其相应的评估和日期效应。

有人可以确认这是正确的。子查询如何处理行?还有什么方法可以解决这个问题?感谢

2 个答案:

答案 0 :(得分:0)

您的查询正在做正确的事情但被授予,相关的子查询有点难以理解。子查询的作用是,它根据外部查询中的assessment过滤记录,然后返回该评估的最大日期效果。实际上,您不需要关联查询的group by子句。

这些类型的查询是在ERP系统中处理数据时常见的,当您只对“最新”记录等感兴趣时。这也称为“顶级段”类型的查询(查询优化器)有时候能够自己解决)。我发现,在SQL Server 2005或更高版本上,使用ROW_NUMBER()函数要容易得多。以下查询应返回与您相同的查询,即每个lraassm的{​​{1}}一条记录,其中dateeffect和correctnum值最高。

assessment

答案 1 :(得分:0)

这是我使用我的表格编写的查询。但它会让你走上正确的轨道,你应该能够替换你的字段/表格。

 Select * from Decode
 where updated_time = (Select MAX(updated_time)from DECODE)

该查询为您提供具有最新updated_time的每条记录。下一个查询将返回最大的entry_id值以及那些记录

中的最新updated_time
Select MAX(entry_id), updated_time from Decode
where updated_time = (Select MAX(updated_time)from DECODE)
group by updated_time

结果是2列1记录,第1列是条目id的最大值,第二列是最近的updated_time。这是你想要回归的吗?