从表中选择最大日期

时间:2019-07-15 12:56:21

标签: sql tsql

我有一个这样定义的表变量

DECLARE @DatesTable TABLE
(
    Id uniqueidentifier,
    FooId uniqueidentifier,
    Date date,
    Value decimal (26, 10)
)

Id始终是唯一的,但是FooId在整个表中都是重复的。我想为每个具有max(date)的唯一FooId从此表中选择*。因此,如果有20行具有4个唯一的FooId,则我希望有4行,为日期最大的每个FooId选择一行。

我尝试使用group by,但是我不断收到关于各个字段不在select子句等中的错误。

2 个答案:

答案 0 :(得分:3)

row_number()使用公用表表达式:

;WITH cte AS
(
    SELECT Id, FooId, Date, Value,
           ROW_NUMBER() OVER(PARTITION BY FooId ORDER BY Date DESC) As rn
    FROM  @DatesTable
)

SELECT Id, FooId, Date, Value
FROM cte
WHERE rn = 1

答案 1 :(得分:2)

最有效的方法通常是相关子查询:

select dt.*
from @DatesTable dt
where dt.date = (select max(dt2.date) from @DatesTable dt2 where dt2.fooid = dt.fooid);

但是,要使其高效,您需要在(fooid, date)上建立索引。在SQL Server的最新版本中,可以在表变量上具有索引。在早期版本中,您可以使用主键来完成此操作。