powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление дубликатов записи
10 сообщений из 10, страница 1 из 1
Удаление дубликатов записи
    #38738493
k_mak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане. Помогите советом как автоматизировать процесс удаления "наименьших" дубликатов записи по двум столбцам=)

На примере скриншота - нужно удалить верхнюю запись (там, где наименьшее время)
В файле более 120000 записей и нужно удалить записи с одинаковой датой, при этом оставив одну запись с наибольшим значением времени
на данном скрине нужно удалить запись от 11.08.14 и время 18.02
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38739188
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k_mak,

Предположительно наилучший способ в данном случае - внутренний запрос sql. Будет проще помочь, если Вы приложите пример с данными.
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38740174
k_mak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy , спасибо за отклик
приложил файлик, в нем пояснил немножко
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38740504
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ThisWorkbook.FullName + ";Extended Properties='Excel 8.0'"

rs.Open _
"SELECT [Сотрудник (Посетитель)], Событие, Помещение, left([Дата и время записи],10), Min(Время) " + _
"FROM [sheet$] " + _
"WHERE Помещение='Неконтролируемая территория' " + _
"GROUP BY [Сотрудник (Посетитель)], Событие, Помещение, left([Дата и время записи],10)" _
, cn, 3

Worksheets(2).Cells(1, 1).CopyFromRecordset rs
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

в файле предварительно нужно создать еще один лист, на который будет вставлен результат

В техзадании есть некоторая неточность в поле "Дата и время записи" у вас нет одинаковых записей, видимо вы имели ввиду - дубликаты по дате, отбросив время - я сделал именно так (группировка по первым десяти символам, так как дата у вас в ячейке в виде текста)
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741292
k_mak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proв файле предварительно нужно создать еще один лист, на который будет вставлен результат

В техзадании есть некоторая неточность в поле "Дата и время записи" у вас нет одинаковых записей, видимо вы имели ввиду - дубликаты по дате, отбросив время - я сделал именно так (группировка по первым десяти символам, так как дата у вас в ячейке в виде текста)
Спасибо за помощь=)Буду пробовать.
По поводу техзадания..может я не так выразился там..я так понял, Ваш вариант будет удалять все записи одного ФИО с одинаковой датой? Мне нужно удалять только ту запись одинаковой даты, в которой временное значение наименьшее..Я правильно понимаю, что в таком случае проще будет по полю "Дата и время записи" искать одинаковую дату по первым 10 символам, а по столбцу "Время" искать наименьшее значение? Или т.к "Время" имеет текстовый формат - сравнение не получится сделать?
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741482
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k_makоставив одну запись с наибольшим значениемk_makМне нужно удалять только ту запись одинаковой даты, в которой временное значение наименьшее.так вы определитесь, какой из этих вариантов - это не одно и то же (для случая, когда больше двух записей на одну фамилию и дату)

Запрос оставляет сейчас только одну запись из нескольких, где одинаковые: сотрудник, событие, помещение и дата (невзирая на время в столбце даты). При этом в столбце Время выводится минимальное время - это я ошибся - измените Min на Max, чтобы выводилось максимальное время
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741609
k_mak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro , да, мне нужно так, как Вы сделали. Но у меня есть 2 загвоздки:

1.Я попробовал поменять min на max и не могу понять почему получается такой результат (см. приложенный скрин). Может это происходить из-за того, что столбец время имеет не формат времени, а формат текста?

2.Может тогда в таком случае можно сделать доп столбец, который будет содержать только часовое значение( отрезать минуты и секунды из поле времени) и добавить условие в where, например, ...and Час > '18' ?
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741655
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо либо преобразовать в дату исходный столбец, либо использовать такую конструкцию в запросе:
Код: plaintext
Format(Min(CDate(Время)),""hh:nn:ss"")
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741737
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Добавьте столбец с датой без времени и столбец порядкового номера записи (сначала вычисляемые, потом специальная вставка значений).
2) Отсортируйте по убыванию времени (остальные столбцы можно игнорировать).
3) Удалите дубликаты (по столбцам даты и, скажем, ФИО сотрудника).
4) Отсортируйте обратно - по порядковому номеру.
5) Удалите ненужные столбцы.
...
Рейтинг: 0 / 0
Удаление дубликатов записи
    #38741786
k_mak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за помощь!
Задача решена=)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Удаление дубликатов записи
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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