Как я могу найти дублирующиеся записи и удалить самые старые в SQL?

У вас странное определение «разницы». Для этого используйте подзапрос:

SELECT CONCAT('£ ', n1) AS Total_N1,
       CONCAT('£ ', n2) AS Total_N2,
       100 * (N1 - N2) / (N1+N2) / 2 as diff 
FROM (SELECT SUM(CASE WHEN t1.col_type = 'N1' THEN t2.qty * t1.price ELSE 0 END) as n1,
             SUM(CASE WHEN t1.col_type = 'N2' THEN t2.qty * t1.price ELSE 0 END) as n2
      FROM t2 INNER JOIN
           t1
           ON t2.col_id = t1.col_id
      ) t
5
задан GEOCHET 26 March 2009 в 12:14
поделиться

3 ответа

Найдите дубликаты и удалите самый старый

alt text

Вот Код

create table #Product (
    ID      int identity(1, 1) primary key,
    Name        varchar(800),
    DateAdded   datetime default getdate()
)

insert  #Product(Name) select 'Chocolate'
insert  #Product(Name,DateAdded) select 'Candy', GETDATE() + 1
insert  #Product(Name,DateAdded) select 'Chocolate', GETDATE() + 5
select * from #Product

;with Ranked as (
    select  ID, 
        dense_rank() 
        over (partition by Name order by DateAdded desc) as DupeCount
    from    #Product P
)
delete  R
from    Ranked R
where   R.DupeCount > 1

select * from #Product
6
ответ дан 13 December 2019 в 19:36
поделиться

удалите из таблицы a1, где существует (выбор * от таблицы a2 где a2.name = a1.name и a2.date> a1.date)

5
ответ дан 13 December 2019 в 19:36
поделиться

Вы могли, вероятно, достигнуть, это с самосоединением и ЯВЛЯЕТСЯ NOT NULL.

Присоединение на Запросах на удаление может быть немного опасным, потому что, чем более сложно это, тем больше риск удаления больше, чем Вы намереваются при некоторых обстоятельствах.

Но я приблизился бы к нему как.

DELETE
  a.*
FROM
  mytable AS a
  LEFT JOIN mytable AS b ON
    b.date > a.date
    AND (b.name=a.name OR (b.date = a.date AND b.rowid>a.rowid))
WHERE
  AND b.rowid IS NOT NULL

Соединением и ЯВЛЯЕТСЯ NOT NULL, находит каждую строку, для которой там существует более новая строка с тем же именем. Это также обрабатывает случай двух строк с той же датой правильно - если у них есть та же дата, затем это идет rowid (независимо от того, что это).

Надо надеяться, что-то вроде этого работает.

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: