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

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

Предположительно наилучший способ в данном случае - внутренний запрос sql. Будет проще помочь, если Вы приложите пример с данными.
...
Рейтинг: 0 / 0
08.09.2014, 09:11
    #38740174
k_mak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записи
iMrTidy , спасибо за отклик
приложил файлик, в нем пояснил немножко
...
Рейтинг: 0 / 0
08.09.2014, 13:42
    #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
09.09.2014, 08:47
    #38741292
k_mak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление дубликатов записи
Shocker.Proв файле предварительно нужно создать еще один лист, на который будет вставлен результат

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

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

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

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


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