我有一张表A,每年有多个记录。我想选择当年的最新记录。如果没有当年的记录,我想选择具有年度字段的最新值的记录。有人可以帮忙吗?
我在SQL Server 2008 V2中有以下查询。
DECLARE @CurrentYear INT
SET @CurrentYear = YEAR(GETDATE())
SELECT Account,
COLUMN2,
COLUMN3,
YEAR_c
FROM A WHERE YEAR_c = @CurrentYear
如果表A中有多个记录用于当前年度2017,则此查询将返回所有记录。我想从这个列表中选择最新的记录。另外,我需要为Account&组合选择一条记录。 Year_c。
答案 0 :(得分:1)
您只需要TOP
和ORDER BY
,但这通常在DATETIME
列上完成。不只是YEAR
列。
SELECT TOP 1
Account,
COLUMN2,
COLUMN3,
YEAR_c
FROM A
ORDER BY
YEAR_c DESC
,Account
Account
中的ORDER BY
只是一个建议......因为只按年份排序每次都会返回不同的结果
或者,每组一个......
SELECT DISTINCT
Account,
COLUMN2,
COLUMN3,
max(YEAR_c)
FROM A
GROUP BY
Account
COLUMN2,
COLUMN3,
答案 1 :(得分:1)
此查询将返回每个帐户的最新记录:
DECLARE @CurrentYear INT
SET @CurrentYear = YEAR(GETDATE())
SELECT * FROM
(
SELECT ROW_NUMBER() OVER (PARTITION BY Account ORDER BY YEAR_c DESC) AS RN,
Account,
COLUMN2,
COLUMN3,
YEAR_c
FROM A WHERE YEAR_c <= @CurrentYear
) AS Results
WHERE RN = 1
诀窍是选择所有记录并为每个帐户(分区)分配行索引,按年份降序排序。 然后只选择行索引为1的那些,这是每个帐户最新的。
希望这有帮助。