powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск дубликатов учитывая дату
15 сообщений из 15, страница 1 из 1
Поиск дубликатов учитывая дату
    #40127070
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

у меня есть таблица, часть ее, на скриншоте ниже.

[img=]

Подскажите, пожалуйста, верно ли создан запрос на поиск дублей в для в каждом/каждого дня:

Код: sql
1.
2.
3.
SELECT  t1.id, t2.id, t1.Volume, t1.Volume, t1.AuditCD, t2.AuditCD FROM Table_1 as t1, Table_1 as t2
WHERE cast(t1.Volume as bigint) = cast(t2.Volume as bigint) AND cast(t1.AuditCD as date) = cast(t2.AuditCD as date) and t1.id > t2.id 
order by t1.id desc



Если да, то каким образом удалить повторяющиеся записи оставив только одну? Верно ли я понимаю что в delete необходимо поместить t2.id данного select?
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127072
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица
[img=]
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127074
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

и где же здесь "повторяющиеся записи"?
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127075
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Caxa_ASS,

и где же здесь "повторяющиеся записи"?


Пущай лучше скажет нафига?
Код: sql
1.
cast(t1.Volume as bigint) = cast(t2.Volume as bigint)



Шобы баще тормозило?
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127080
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

моя ошибка, не уточнил, по этому дополню вопрос:

Подскажите, пожалуйста, верно ли создан запрос на поиск дублей в столбце 'Volumne' в для в каждого дня. Дубли (повторяющиеся числа) не видны на скриншоте, но они есть.
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127081
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

потому что, уважаемый, одинаковые записи в столбце Volumne, могут быть в разные дни. Если 2021.04.01 в столбце Volumne, есть дубль, к примеру значение 1000, то это не считается дублем для следующего дня к примеру 2021.04.02
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127083
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

если версия позволяет
row_number с партициями по cast(дате as date) / колонке
и удалить все больше 1
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127095
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

элементарно можно проверить
"верно ли создан запрос на поиск дублей в для в каждом/каждого дня"

создайте два тестовых набора данных, один заведомо содержит искомые дубли, второй их не содержит. Выполните запрос, сравните с ожидаемым результатом. Это называется "тестирование". Используйте его чаще, пишите тесты. При этом вовсе не обязательно иметь производственные данные под рукой.
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127121
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS
aleks222,

потому что, уважаемый, одинаковые записи в столбце Volumne, могут быть в разные дни. Если 2021.04.01 в столбце Volumne, есть дубль, к примеру значение 1000, то это не считается дублем для следующего дня к примеру 2021.04.02

Медицина тут бессильна.
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127158
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Caxa_ASS,

попробуйте так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF object_id('tempdb..#uniq_date_id') IS NOT NULL
	DROP TABLE #uniq_date_id

SELECT convert(DATE, AuditCD) AS [r_date]
	,[Volume]
	,max([id]) AS [id]
INTO #uniq_date_id
FROM Table_1
GROUP BY convert(DATE, AuditCD), Volume

DELETE t1
FROM Table_1 t1
LEFT JOIN #uniq_date_id t2
	ON t1.[id] = t2.[id]
WHERE t2.[id] IS NULL
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127164
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_Va
Caxa_ASS,

попробуйте так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF object_id('tempdb..#uniq_date_id') IS NOT NULL
	DROP TABLE #uniq_date_id

SELECT convert(DATE, AuditCD) AS [r_date]
	,[Volume]
	,max([id]) AS [id]
INTO #uniq_date_id
FROM Table_1
GROUP BY convert(DATE, AuditCD), Volume

DELETE t1
FROM Table_1 t1
LEFT JOIN #uniq_date_id t2
	ON t1.[id] = t2.[id]
WHERE t2.[id] IS NULL



Если медицина бессильна - в дело вступают шарлатаны...

Код: sql
1.
2.
3.
4.
with t as (SELECT  * FROM Table_1)
  select  'Дубли. Только дубли', * -- delete
    from t
    where exists( select * from t as t1 where t1.Volume = t.Volume and cast(t1.AuditCD as date) = cast(t.AuditCD as date) and t1.id < t.id)
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127165
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY Volume, CAST(AuditCD AS DATE) ORDER BY AuditCD DESC) FROM Table_1)
DELETE CTE WHERE N>1;
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127166
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY Volume, CAST(AuditCD AS DATE) ORDER BY AuditCD DESC) FROM Table_1)
DELETE CTE WHERE N>1;


Печально.
У ТС id есть.
Напрягать сервер группировкой - гнилая идея.
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127203
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
iap
Код: sql
1.
2.
WITH CTE(N) AS(SELECT ROW_NUMBER()OVER(PARTITION BY Volume, CAST(AuditCD AS DATE) ORDER BY AuditCD DESC) FROM Table_1)
DELETE CTE WHERE N>1;



Печально.
У ТС id есть.
Напрягать сервер группировкой - гнилая идея.
Чем поможет id?
...
Рейтинг: 0 / 0
Поиск дубликатов учитывая дату
    #40127391
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Alex_Va
Caxa_ASS,

попробуйте так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
IF object_id('tempdb..#uniq_date_id') IS NOT NULL
	DROP TABLE #uniq_date_id

SELECT convert(DATE, AuditCD) AS [r_date]
	,[Volume]
	,max([id]) AS [id]
INTO #uniq_date_id
FROM Table_1
GROUP BY convert(DATE, AuditCD), Volume

DELETE t1
FROM Table_1 t1
LEFT JOIN #uniq_date_id t2
	ON t1.[id] = t2.[id]
WHERE t2.[id] IS NULL



Если медицина бессильна - в дело вступают шарлатаны...


В чём шарлатанство?..
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск дубликатов учитывая дату
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]