2016-03-17 3 views
1

Я знаю, есть много q & a для этого. Но он не возвращает правильный ответ. У меня есть образец результата таблицы. В таблице много данных. Но мне нужно удалить дубликаты записей с одинаковым статусом, 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 внутри раздела, он не считается дубликатом, так как в имеет отличие в секундах .. но мне нужен рассмотрите это состояние. Как я должен это делать? HELP PLEASE

enter image description here

+4

изменение, созданное на что-то вроде cast (createdon as date) – TheGameiswar

+0

Спасибо @ TheGameiswar, попробуем это – ninja

+0

привет @ TheGameiswar, есть ли способ отправить дату, но удалить секунды? – ninja

ответ

0

Пожалуйста, попробуйте похожее на это (Diff Макса и МИН 'Createdon' и группы по обязательным столбцам)

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 
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; 

Использование CreatedOn в Order By. Набор PARTITION BY установлен на ваши будущие уникальные ключи - StatusID, LevelOneIRCID, LevelTwoIRCID, LevelThreeIRCID. Я предположил, что ваш запрос был в порядке.

Смежные вопросы