|
|
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Загружается таблица (таблицы могут быть любые, с различными структурами) Мне нужно отобразить строки, в которых повторяются все значения полей. Как бы это сделать, желательно с помощью SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:02 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Привет select naimen,; ves,; cena,; count(naimen) as kol; from tabl1; group by naimen,ves,cena; into cursor ttt nofilter Там где kol>1 - повторяющиеся Дальше обрабатывай курсор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:18 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Изначально мне не известно какая таблица будет загружена и какие будут поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:24 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Запрос генеришь программно, AFIELDS() - список полей и запускаешь через макроподстановку. Второй вариант - считаешь хэш (MD5 например) каждой записи, пишешь в отдельный курсор recno() обрабатываемой записи и хэш. Дальше по хэшу такой же селект и в обратную сторону по номерам выбранных записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:25 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Dima T Код: plaintext Запрос генеришь программно, AFIELDS() - список полей и запускаешь через макроподстановку. Точно. Спасибо. А не подскажите ли как я теперь эти строки могу удалить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 14:50 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
RemansА не подскажите ли как я теперь эти строки могу удалить? генери Код: plaintext Так медленно очень будет удалять, если надо удаление, то проще по варианту с хэшами делать. Задача то какая изначально? Или ты хочешь по шагам спрашивать? Если надо получить таблицу без задвоений, т.е. задвоившиеся записи в одном экземпляре, то так: Код: plaintext Для проверки есть ли задвоения можно кол-во записей сравнивать: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 15:13 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Dima T генери Код: plaintext Так медленно очень будет удалять, если надо удаление, то проще по варианту с хэшами делать. Задача то какая изначально? Или ты хочешь по шагам спрашивать? Если надо получить таблицу без задвоений, т.е. задвоившиеся записи в одном экземпляре, то так: Код: plaintext Для проверки есть ли задвоения можно кол-во записей сравнивать: Код: plaintext 1. 2. 3. 4. Задача так и стоит: сначала отобразить, а потом, при необходимости, удалить. А с хэшами я вообще ничего не понял :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 16:38 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
RemansА с хэшами я вообще ничего не понял :) Делаешь курсор THASH (nRecno i, cMD5 c(32)) заполняешь nRecno - номер записи в исходной таблице Recno(), cMD5 - MD5() от записи преобразованной в строку. Преобразовать можно через SCATTER и разбор массива для каждой записи. Затем работаешь с курсором. Для одинаковых записей хэш будет одинаковый. По хэшу в курсоре просто найти номер записи в исходной таблице. Тут недавно похожую ситуацию обсуждали, про хэши спорили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2008, 17:00 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Дим, а есть смысл просчитывать хэш? Мне кажется с просчитыванием хэша, во первых, гораздо больше заморочек, во вторых, время на просчитывание хэша будет уходить немаленькое. В данной ситуации простого Group by ... having ... со всеми полями хватит заглаза Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 05:07 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
делаю так: делаю копию файла - потом помечаю двойников- потом удаляю **delete dvoinikov CLOSE TABLES *USE d:\eias_iz\kvp SET DEFAULT TO d:\dub\ COPY FILE d:\eias_iz\kvp.dbf TO pervac.dbf COPY FILE d:\eias_iz\kvp.dbf TO drugac.dbf USE pervac IN 1 SELECT 1 DELETE TAG all INDEX on column3 TAG column3 USE drugac IN 2 SELECT 2 DELETE TAG all INDEX on column3 TAG column3 SELECT 1 DELETE TAG all INDEX on column3 TAG column3 UPDATE ON column3 FROM drugac REPLACE Column13 WITH 'e' CLOSE TABLES USE pervac DELETE FOR pervac.column13 <> 'e' PACK BROWSE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 08:51 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Galyamov Rinat Дим, а есть смысл просчитывать хэш? Если можно без макроподстановок, то лучше без них. Читабельнее код будет. Структура таблицы ведь заранее неизвестна. Если надо после удалять - то проще иметь хотя бы порядковые номера удаляемых записей, чем городить условие отбора по значению: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 16:58 |
|
||
|
Отобразить повторяющиеся строки
|
|||
|---|---|---|---|
|
#18+
Забыл еще добавить - всегда лучше все тяжелые операции собрать воедино, т.е. юзер знает что он чего-то запустит, оно долго посчитает, а потом он быстро все закончит. Он запустит и чем-нибудь еще позанимается пока комп молотит. А если перемешивать действия пользователя и тяжелые операции (delete for ... по большой таблице например) то юзеру и не отойти и быстро не сделать, вот он и будет сидеть и матерится про себя на разработчика ожидая ответа на очередную нажатую кнопку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2008, 17:04 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=35365114&tid=1587678]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 375ms |

| 0 / 0 |
