У меня есть большой набор измерений, сделанных каждые 1 миллисекунда, хранящихся в таблице SQL Server 2012. Всякий раз, когда в некоторых строках есть 3 или более повторяющихся значения, я хотел бы удалить средние дубликаты. Выделенные значения в этом образце данных образца - это те, которые я хочу удалить. Есть ли способ сделать это с помощью SQL-запроса?Удаление дубликатов во временных рядах
ответ
Вы можете сделать это с помощью CTE
и ROW_NUMBER
:
WITH CteGroup AS(
SELECT *,
grp = ROW_NUMBER() OVER(ORDER BY MS) - ROW_NUMBER() OVER(PARTITION BY Value ORDER BY MS)
FROM YourTable
),
CteFinal AS(
SELECT *,
RN_FIRST = ROW_NUMBER() OVER(PARTITION BY grp, Value ORDER BY MS),
RN_LAST = ROW_NUMBER() OVER(PARTITION BY grp, Value ORDER BY MS DESC)
FROM CteGroup
)
DELETE
FROM CteFinal
WHERE
RN_FIRST > 1
AND RN_LAST > 1
Это почти работает. Но, если предшествовать точке данных и следовать равным значениям, она удаляется. Пример: 20,20,40,20,20 - 40 удаляется, когда этого не должно быть. Я попытался изменить предложение where на «LG = LD и LG = Value», но это выглядело некорректно. – JPoole
Я подозреваю, что здесь должно быть 'WHERE RN_FIRST <> 1 И RN_LAST <> 1' –
@GiorgiNakeuri, я считаю '' 'будет достаточно, поскольку' ROW_NUMBER' начинается с '1', или я что-то упускаю? –
Да есть
select * from table group by table.field ->value
это не учитывает порядок значений. – Jerome
Я уверен, что должен быть более эффективный способ сделать это, но вы могли бы присоединиться к таблице в себя два раза, чтобы найти предыдущее и следующее значение в списке, а затем удалите все записи, в которых все три значения одинаковы.
DELETE FROM tbl
WHERE ms IN
(
SELECT T.ms
FROM tbl T
INNER JOIN tbl T1 ON T.ms = T1.ms + 1
INNER JOIN tbl T2 ON T.ms = T2.ms - 1
WHERE T.value = T1.value AND T.value = T2.value
)
Если стол действительно большой, я могу видеть этот дующий темпдб.
- 1. Проверка временных меток во временных рядах
- 2. Закрытие зазора во временных рядах
- 3. регрессия python во временных рядах
- 4. Коррелированные остатки во временных рядах
- 5. Именование строк во временных рядах
- 6. Недостающие значения во временных рядах
- 7. Изучение колебаний во временных рядах
- 8. Найти изменение значения во временных рядах
- 9. R AUC нескольких образцов во временных рядах
- 10. Заполнение пробелов во временных рядах Spark
- 11. Изменить `character` на` numeric` во временных рядах
- 12. Эффективно добавлять отсутствующие значения во временных рядах
- 13. Отслеживание появления уникальных идентификаторов во временных рядах
- 14. Функция для прогнозирования во временных рядах
- 15. Прогнозирование с пробелами во временных рядах
- 16. stop bound pandas index во временных рядах
- 17. Разница во временных рядах в диграфах
- 18. Тестирование нескольких столбцов во временных рядах одновременно
- 19. Поиск сезонности автоматически во временных рядах
- 20. Gap во временных рядах не отображается
- 21. Устранение дат по характеристикам во временных рядах
- 22. Нетривиальная аналитика на временных рядах
- 23. «отставание» в нерегулярных временных рядах
- 24. Как предотвратить перекрытие текста по оси x во временных рядах?
- 25. Поиск пропущенного ряда во временных рядах в R
- 26. Групповые строки на основе пробелов во временных рядах
- 27. Определите важные минимумы и максимумы во временных рядах w/Mathematica
- 28. Найти повторяющиеся события во временных рядах с помощью pandas
- 29. Определить окна/эпохи во временных рядах и рассчитать среднее значение
- 30. Где в Rails заполнять пробелы во временных рядах?
Вы можете сказать нам версию SQL Server? Это говорит нам о том, являются ли функции оконной обработки опцией –
В этом вопросе говорится о SQL 2012. Мне очень интересно посмотреть, как они будут работать (я их никогда не использовал). – Alan
Версия сервера - 2012 Express. – JPoole