首页 > 解决方案 > 仅获取每个名称的最新日期的行

问题描述

我正在尝试编写一个查询,该查询仅返回那些包含每个名称的最新日期的行。

例如,这个数据:

姓名 售出日期 更多列...
鲍勃 2021-01-05
麦克风 2021-01-18
苏珊 2021-01-23
鲍勃 2021-02-04
苏珊 2021-02-16
麦克风 2021-03-02

会产生这样的结果:

姓名 售出日期 更多列...
鲍勃 2021-02-04
苏珊 2021-02-16
麦克风 2021-03-02

它有点像 a GROUP BY,但我没有汇总任何内容。我只想过滤原始行。

我怎么能写这样的查询?

注意:最后,这将是一个 SQL Server 查询,但我需要使用实体框架编写它。

更新:实际上,这是一个更复杂的查询的一部分。将其作为原始 SQL 查询来实现对我来说非常困难。如果可能的话,我需要使用实体框架来实现。

标签: c#sql-serverentity-frameworklinq.net-5

解决方案


两种选择

Select top 1 with ties *
 From  YourTable 
 Order by row_number() over (partition by Name order by Sold_Date desc)

或性能稍高一些

with cte as (
Select *
      ,RN = row_number() over (partition by Name order by Sold_Date desc)
 From  YourTable
)
Select *
 From  cte 
 Where RN=1

推荐阅读