У меня есть таблица, в которой около 300 000 строк. 225 строк добавляются в эту таблицу ежедневно с 16 марта 2015 г. по 09 июля 2015 г.
Моя проблема в том, что за последнюю неделю или около того в таблицу вводятся повторяющиеся строки (т.е. более 225 в день)
Теперь я хочу выбрать (и, в конечном счете, удалить!) все повторяющиеся строки из таблицы, которые имеют более 1 комбинации siteID + reportID, существующих для одного столбца Date .
Пример прикреплен на скриншоте:
2 ответа
Когда Row_Number() используется с предложением Partition By, он может предоставить разработчику SQL возможность выбирать повторяющиеся строки в таблице.
Ознакомьтесь с руководством по SQL на странице как удалить повторяющиеся строки в таблице SQL Ниже приведен запрос, скопированный из этой статьи и примененный к вашему требованию:
;WITH DUPLICATES AS
(
SELECT *,
RN = ROW_NUMBER() OVER (PARTITION BY siteID, ReportID ORDER BY Date)
FROM myTable
)
DELETE FROM DUPLICATES WHERE RN > 1
Я надеюсь, что это помогает,
PARTITION
должно быть siteID, ReportID, Date
, а ORDER
- каким-то другим столбцом, например ID
.
Если вы хотите отфильтровать повторяющиеся строки, я предлагаю вам запрос такого типа:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Col1, Col2 ORDER BY Col3) As seq
FROM yourTable) dt
WHERE (seq > 1)
Как это:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY siteID, reportID, [Date] ORDER BY ID) As seq
FROM yourTable) dt
WHERE (seq > 1)
Похожие вопросы
Связанные вопросы
Новые вопросы
sql-server
Microsoft SQL Server — это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков Microsoft SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. д.). Не используйте этот тег для вопросов по программному обеспечению и разработке мобильных устройств, если только он не связан напрямую с базой данных.
UNIQUE
после удаления текущих дубликатов.