SQL 服务器:从 table 中选取最近日期的条目

SQL Server : picking entry with most recent date from table

我正在使用 SQL Server 2008 R2 table。我正在尝试清理 table。 tables 包含客户个人数据列表以及最后一次见到客户的时间。我正在尝试获取客户列表,但有重复项。请在下面考虑我的 table:

CustomerID  LastSeen    FirstName   LastName
--------------------------------------------
000030059   19971209    Jane        Doe  
000118444   20010210    Jane        Doe 
000000001   20100402    Marie       Dote
000000002   20121115    John        Glue

在这个小样本中,Jane Doe 有两个条目。这将被视为重复。我需要获取最新的条目,而不是另一个条目。在这种情况下,具有 LastSeen 值的条目 = '20010210'。我还需要获取所有没有重复的条目。最终结果应如下所示:

CustomerID  LastSeen    FirstName   LastName 
--------------------------------------------
000118444   20010210    Jane        Doe 
000000001   20100402    Marie       Dote
000000002   20121115    John        Glue

如何使用 T-SQL 语句在 SQL 服务器中执行此操作?我更喜欢它是一个单一的声明,但一个脚本很好。我不知道从哪里开始。

您可以轻松地使用带有 "partitioned" ROW_NUMBER 的 CTE - 像这样:

WITH SelectSingleRows AS
(
    SELECT
        CustomerID, LastSeen, FirstName, LastName,
        RowNum = ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY LastSeen DESC)
    FROM
        dbo.YourTable
)
SELECT
    CustomerID, LastSeen, FirstName, LastName
FROM
    SelectSingleRows
WHERE
    RowNum = 1

CTE 基于 CustomerID 创建 "partitions"(数据包),然后根据 ORDER BY 对所有行(每个 CustomerID)进行编号条款 - 在这里,我选择按 LastSeen 降序排序(希望这个 IS 实际上是 DATEDATETIME 列) -所以最近的条目将获得值 1,然后是下一个(如果存在)2,依此类推。

你想要的是每个 CustomerID 的最新条目 - 所以你只需 select 所有那些来自 CTE 的 RowNum = 1 行 - 你就完成了,