SQL Server如何从每个条件的多个结果集中获取单个记录

时间:2017-08-23 14:56:40

标签: sql-server sql-server-2008

我有一张表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。

2 个答案:

答案 0 :(得分:1)

您只需要TOPORDER 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的那些,这是每个帐户最新的。

希望这有帮助。