CTE未返回预期值

时间:2014-11-14 14:36:01

标签: sql sql-server common-table-expression

我有一个表,我试图使用公用表表达式找到重复的行。我使用的字段如下:

LogTime(DataType:datetime2(7),null) ControllerIP(数据类型:nvchar(max),null)

据我所知,我有两行数据,其中包含相同的数据。我对两列进行了LEN检查,以确保它们的长度相等,但行不会重复 使用下面的CTE时。我需要对LogTime列有什么不同吗?我从来没有碰到过这个。

WITH CTE AS 
(
SELECT rn = ROW_NUMBER() 
            OVER( 
              PARTITION BY LogTime , ControllerIP
              ORDER BY Id ASC), * 
FROM [DownTime].[dbo].[Records]
) 
SELECT * FROM cte 
WHERE   FileName = '141101.CSV' AND rn > 1 
Order By ID
GO

另外,我使用的是Microsoft SQL Server 2008R2。

1 个答案:

答案 0 :(得分:1)

你的计划很健全。如果您没有找到重复项,那是因为重复项不存在。您可以对列应用某些函数以更有可能查找重复项,例如从IP修剪空格并降低datetime2的精度。

WITH CTE AS (
    SELECT rn = ROW_NUMBER() OVER( 
        PARTITION BY CAST(LogTime AS datetime2(2)), RTRIM(LTRIM(ControllerIP))
        ORDER BY Id ASC), * 
    FROM [DownTime].[dbo].[Records]
) 
SELECT * FROM cte 
WHERE FileName = '141101.CSV' AND rn > 1 
Order By ID