Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询以获取一年中的最后一个条目并处理关系_Sql_Sql Server_Select - Fatal编程技术网

SQL查询以获取一年中的最后一个条目并处理关系

SQL查询以获取一年中的最后一个条目并处理关系,sql,sql-server,select,Sql,Sql Server,Select,我试图从以下样本数据中仅获取每年最新的记录,以防出现tie,获取ObjectID最高的记录。(请参见图片和SQL FIDLE)。感谢您的帮助。 (数据库:SQL Server 2008) 请参阅SQL FIDLE: 我希望所有的记录,得到最新的条目,在每年的情况下,领带得到一个有最高的ObjectID 图像输入数据和预期结果: 我尝试了示例代码,但没有成功: SELECT t1.*, Year(lastvaluationdate) as Val_year FROM FS t1 WHERE t1

我试图从以下样本数据中仅获取每年最新的记录,以防出现tie,获取ObjectID最高的记录。(请参见图片和SQL FIDLE)。感谢您的帮助。 (数据库:SQL Server 2008)

请参阅SQL FIDLE:

我希望所有的记录,得到最新的条目,在每年的情况下,领带得到一个有最高的ObjectID

图像输入数据和预期结果:

我尝试了示例代码,但没有成功:

SELECT t1.*, Year(lastvaluationdate) as Val_year FROM FS t1
WHERE t1.objectid = (SELECT MAX(t2.objectid)
                 FROM FS t2              
                 WHERE t2.ENTITYUID = t1.ENTITYUID and t2.LASTVALUATIONDATE 
                 = t1.LASTVALUATIONDATE)                    
order by ENTITYUID  

您应该为此使用窗口函数:

SELECT FS.*
FROM (SELECT FS.*,
             ROW_NUMBER() OVER (PARTITION BY  EntityUID, Year(lastvaluationdate)
                                ORDER BY lastvaluationdate DESC, ObjectId DESC
                               ) as seqnum
      FROM FS
     ) FS
WHERE seqnum = 1;


谢谢@Gordon,虽然它看起来很有效,但有点不对劲。在200条记录中,它只返回21条。它不会处理那些一年中只有一条记录的记录!。还有一件事,将SQL Fiddle与我附加的图像进行比较。结果至少需要5条记录,但您只需要带3条。我认为我们很接近,只是一年一组。“您的查询带来实体生命中的最新条目,但我们希望每年都有条目。”@Abdul I修复了它。你从来没有在问题中说过你也想用EntityUID分开。我们不得不推断,在你发布的图片中阅读并不容易(提示:这里的文本总是更好)。@JoelCoehoorn谢谢,这就像魅力一样有效。是的,当我再次阅读问题时,我错过了关于实体ID的解释。它在我的脑海里,但在写作中却漏掉了。谢谢你pointing@Gordon我向你道歉,这个问题漏掉了重点,可能给你带来了困难。谢谢你的帮助!结果与你要求的不符。例如,EntityUID
1GCPEA3AZ122834
有2017年和2016年的记录,但只有2017年的记录显示在您的结果集中。此外,我们更喜欢您问题中的文本。首先,这将使我们能够为您修复样本结果中的错误。我们认为发布你的数据或结果的图片是非常无礼的。“Joel Coehoom,一开始,谢谢你的时间和帮助。这很有效。我很抱歉,我明白你说的了,形象在这里是没有帮助的。虽然我的意图很明显是为了让它更容易理解。对我以后来说,这是一个很好的教训
SELECT t2.*
FROM (SELECT DISTINCT EntityUID, YEAR(LastValuationDate) YR FROM FS) t0
OUTER APPLY (
    SELECT TOP 1 * 
    FROM FS t1 
    WHERE t1.EntityUID = t0.EntityUID AND YEAR(t1.LastValuationDate) = t0.YR
    ORDER BY t1.LastValuationDate DESC, t1.ObjectID DESC
) t2
ORDER BY EntityUID DESC, LastValuationDate DESC, ObjectID DESC