我想创建一个查询,返回日期字段的最新日期,以及每个“评估”记录的整型字段的最高值。我认为需要的是一个相关子查询和使用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所以我的理论是,内部查询执行,并在外部查询中为外部查询提供日期效果字段的条件,然后外部查询将返回该日期效果的正确字段的最大值,并返回其相应的评估和日期效果。
有人能确认一下这是正确的吗?子查询如何处理行?还有什么其他方法可以解决这个问题呢?谢谢
发布于 2014-06-03 21:05:42
您的查询正在做正确的事情,但就算如此,相关子查询还是有点难以理解。子查询的作用是根据外部查询中的assessment过滤记录,然后返回该评估的最大日期效果。实际上,您不需要在相关查询上使用group by子句。
这些类型的查询在处理ERP系统中的数据时很常见,当您只对“最新”记录感兴趣时,等等。这也被称为“顶部分段”类型的查询(查询优化器有时能够自己找出)。我发现,在SQL Server2005或更高版本上,使用ROW_NUMBER()函数要容易得多。下面的查询应该返回与您的查询相同的结果,即每个assessment都有一条来自lraassm的记录,该记录具有最高的dateeffect和校正Num值。
select * from (
select
assessment, dateeffect, correctnum,
ROW_NUMBER() OVER (
PARTITION BY assessment,
ORDER BY dateeffect DESC, correctnum DESC
) AS segment
from lraassm) AS innerQuery
where segment = 1发布于 2014-06-03 21:06:14
这是我使用我的表解出的查询。但是它会让你走上正确的道路,你应该能够在中替换你的字段/表。
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记录,第一列是条目id的最大值,第二列是最近的updated_time。这就是你要退还的东西吗?
https://stackoverflow.com/questions/24015488
复制相似问题