В ответ на вопрос Павла:
Что происходит, когда у вас есть три записи, a, b, c. a = 00 секунд b = 19 секунд c = 39 секунд> Все ли они считаются одинаковыми? (a находится в пределах 20 секунд от b, b находится в пределах 20> секунд от c)
Если другие сравнения равны (AssociatedEntityid и AssociatedEntityType), тогда да, они считаются одинаковыми, в противном случае нет.
Я бы добавил к исходному вопросу, за исключением того, что я использовал другой аккаунт для публикации вопроса и теперь не могу вспомнить свой пароль. Это был очень старый аккаунт, и я не осознавал, что я подключился к сайту с ним.
Я работал с некоторыми ответами, которые вы, ребята, дали мне, и есть одна проблема: вы используете только один ключевой столбец (AssociatedEntityid), когда их два (AssociatedEntityID и AssociatedEntityType). Ваши предложения отлично подойдут для одного ключевого столбца.
То, что я до сих пор делал, это:
Шаг 1. Определите, какие пары AssociatedEntityID и AssociatedEntityType имеют дубликаты, и вставьте их во временную таблицу:
create table ##stage1 (ID int, AssociatedEntityID int, AssociatedEntityType int, [Timestamp] datetime)
insert into ##stage1 (AssociatedEntityID, AssociatedEntityType)
(select AssociatedEntityID, AssociatedEntityType from tblHBMLog group by AssociatedEntityID, AssociatedEntityType having COUNT(*) > 1)
Шаг 2. Извлечение идентификатора самой ранней строки с заданной парой AssociatedEntityID и AssociatedEntityType:
declare curStage1 cursor for
select AssociatedEntityID, AssociatedEntityType from ##stage1
open curStage1
fetch next from curStage1 into @AssocEntity, @AssocType
while @@FETCH_STATUS = 0
begin
select top 1 @ID = ID, @Timestamp = [Timestamp] from tblHBMLog where AssociatedEntityID = @AssocEntity and AssociatedEntityType = @AssocType order by [Timestamp] asc
update ##stage1 set ID = @ID, [Timestamp] = @Timestamp where AssociatedEntityID = @AssocEntity and AssociatedEntityType = @AssocType
end
И здесь все снова замедляется. Теперь, при условии, что результирующий набор был сокращен с ~ 17 миллионов до чуть менее 400 000, но он все еще занимает довольно много времени, чтобы пройти.
Полагаю, мне следует задать еще один вопрос: Если я продолжу писать это на SQL, это займет много времени? Должен ли я написать это в C # вместо этого? Или я просто тупой и не вижу леса за деревьями этого решения?
Ну, после сильного стука ног и скрежета зубов, я нашел решение. Это просто, быстрое и грязное приложение командной строки C #, но оно быстрее, чем скрипт sql, и выполняет свою работу.
Я благодарю вас всех за помощь, в конце концов сценарий sql просто занимал слишком много времени для выполнения, а C # намного лучше подходит для циклического выполнения.