Sql 根据插入的时间删除重复记录

Sql 根据插入的时间删除重复记录,sql,sql-server,Sql,Sql Server,我知道,这方面有很多问答。但它并没有返回正确的答案。我这里有表格的样本结果。表中有很多数据。但是我需要删除状态相同的重复记录,col1、col2、col3和createdon只有分/秒的差异 这是我获取重复记录的查询 WITH CTE AS ( SELECT IssueID AS id, CallID, StatusID AS [status], LevelOneIRCID AS col1, LevelTwoIRCID AS col2,

我知道,这方面有很多问答。但它并没有返回正确的答案。我这里有表格的样本结果。表中有很多数据。但是我需要删除状态相同的重复记录,col1、col2、col3和createdon只有分/秒的差异

这是我获取重复记录的查询

WITH CTE AS 
(
    SELECT 
        IssueID AS id, CallID, StatusID AS [status], 
        LevelOneIRCID AS col1, LevelTwoIRCID AS col2, 
        LevelThreeIRCID AS col3, CreatedOn, 
        AddedByUserID AS updatedon, 
        rn = ROW_NUMBER() OVER(PARTITION BY statusid, leveloneircid, leveltwoircid, levelthreeircid, businessunitone, businessunittwo, businessunitthree, Remarks, AddedByUserID --, CreatedOn
                               ORDER BY  leveloneircid, LevelTwoIRCID, LevelThreeIRCID, BusinessUnitOne, BusinessUnitTwo, BusinessUnitThree, Remarks)  
    FROM 
        dbo.Issues 
) 
SELECT * 
FROM CTE 
WHERE rn > 1;
但是,当我将createdon添加到分区中时,它不会被视为重复,因为在中有以秒为单位的差异。。但我需要考虑这个条件。我该怎么办?请帮忙


请尝试类似的方法(区分“Createdon”的最大值和最小值,并按所需列分组)


请尝试与此类似的方法(“Createdon”的最大值和最小值的差异以及按所需列分组)

使用
orderby
中的
CreatedOn
。分区依据设置为您未来的唯一键-
StatusID、LevelOneIRCID、LevelTwoIRCID、LevelThreeIRCID
。我认为你的问题是可以的


使用
orderby
中的
CreatedOn
。分区依据设置为您未来的唯一键-
StatusID、LevelOneIRCID、LevelTwoIRCID、LevelThreeIRCID
。我认为你的问题是可以的

将创建的内容更改为cast(createdon as date)谢谢@TheGameiswar,我会试试看@TheGameiswar,有没有办法在不删除秒数的情况下发布日期?@TheGameiswar已经提前发布了。在你的分区中使用刚才的createdon插件,通过querychange将创建的内容更改为cast(createdon作为日期)感谢@TheGameiswar,我会试试看@TheGameiswar,有没有办法在不删除秒数的情况下施放日期?@TheGameiswar已经提前发布了。通过查询在分区中使用justcreatedon的insetad
SELECT  status, col1, col2, col3, datediff(hour,MAX(CreatedOn),MIN(CreatedOn)) AS diff
FROM dbo.Issues 
GROUP BY status, col1, col2, col3
HAVING datediff(hour,MAX(CreatedOn),MAX(CreatedOn)) > 0
WITH CTE AS 
(
    SELECT 
        IssueID AS id, CallID, StatusID AS [status], 
        LevelOneIRCID AS col1, LevelTwoIRCID AS col2, 
        LevelThreeIRCID AS col3, CreatedOn, 
        AddedByUserID AS updatedon, 
        rn = ROW_NUMBER() OVER(PARTITION BY StatusID, LevelOneIRCID, LevelTwoIRCID, LevelThreeIRCID 
                               ORDER BY  CreatedOn)  
    FROM 
        dbo.Issues 
) 
SELECT * 
FROM CTE 
WHERE rn > 1;