T-SQL查询帮助-选择唯一分组?

T-SQL查询帮助-选择唯一分组?,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,我的表格有3列: RecordId Value InsertDate 每个RecordId在表中有多个条目。事实上,该表一天更新几次 如何编写一个t-sql查询,根据InsertDate为每个唯一记录选择所有最新的行 我的t-sql技能根本不存在 提前感谢您可以使用CTE通用表表达式和排名函数-如下所示: ;WITH YourQuery AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY RecordId O

我的表格有3列:

 RecordId
Value
InsertDate
每个RecordId在表中有多个条目。事实上,该表一天更新几次

如何编写一个t-sql查询,根据InsertDate为每个唯一记录选择所有最新的行

我的t-sql技能根本不存在


提前感谢

您可以使用CTE通用表表达式和排名函数-如下所示:

;WITH YourQuery AS
(
     SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY RecordId ORDER BY InsertDate DESC) 'RowNumber'
     FROM dbo.YourTable
     WHERE InsertDate < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
)
SELECT *
FROM YourQuery
WHERE RowNumber = 1
CTE内部SELECT选择所有行,按RecordId对它们进行分区,按InsertDate排序,从最新开始降序-因此,这将为您提供按ID、InsertDate排序的所有记录的列表,以及每个新RecordId从1开始的RowNumber字段


因此,对于每个RecordId,RowNumber=1的条目是最新的一个—这就是第二个外部选择所做的。

请参见@marc_s的答案,但您也必须向表中添加另一列,该列是该行的唯一id。对于这个问题并没有太多,但是对于以后您将遇到的问题。即使您认为不会使用它,也有很多很好的理由将主键放在表上

alter table YourTable
 add Id int identity not null
alter table YourTable
 add constraint "YourTable_PK" primary key ("Id")   

我认为没有CTE和ROW_编号是可能和容易的…还是我遗漏了什么

select RecordID, max(InsertDate) 
from YourTable 
group by RecordID

由于表一天更新几次,InsertDate包含日期和时间,对吗?非常感谢。如何修改此选项以选择InsertDate不等于今天的最新日期?@DayTwo:无需修改任何内容-它将始终显示最近的日期-今天、昨天或一周前-无论是什么,它都会获取最近的日期是的,谢谢,但我不希望结果包含今天的日期。因此,如果InsertDate=Today,则应使用下一个最新日期。再次感谢您的支持help@DayTwo:好的,我更新了答案,只选择插入日期不是今天的条目。