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 实际上是 DATE
或 DATETIME
列) -所以最近的条目将获得值 1,然后是下一个(如果存在)2,依此类推。
你想要的是每个 CustomerID
的最新条目 - 所以你只需 select 所有那些来自 CTE 的 RowNum = 1
行 - 你就完成了,
我正在使用 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 实际上是 DATE
或 DATETIME
列) -所以最近的条目将获得值 1,然后是下一个(如果存在)2,依此类推。
你想要的是每个 CustomerID
的最新条目 - 所以你只需 select 所有那些来自 CTE 的 RowNum = 1
行 - 你就完成了,