06.08.2008, 14:57 | #1 |
Участник
|
Отсеять дублирующиеся по определенному полю рекорд
Можно ли в один запрос сделать это? Смотрел в сторону notexist join в вайл селекте, но так пропадут и те рекорды, у которых есть дубликаты, а мне надо одобрать все уникальные значения, то есть из набора:
1 3 5 5 1 2 Результат должен получиться: 1352, в случае же с notexist join только 32. И вообще, жаль, что в Аксапте нет дистинкта, так что возможно прийдется выполнять из строки.
__________________
Axapta has seduced me deadly! |
|
06.08.2008, 15:04 | #2 |
Участник
|
Через джоин и группировку?
|
|
06.08.2008, 15:10 | #3 |
Axapta
|
X++: while select table group by field |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.08.2008, 15:12 | #4 |
Участник
|
Без джойна. Просто группировка. Разумеется, если кроме этого поля больше ничего не надо.
Хотя стандартное решение - это сортировка по указанному полю с сохранением значения предыдущей записи в переменной. X++: int prevValue = ( ); while select MyTable order by MyField { if (prevValue == MyTable.MyField) { // дубль. Беру следующую запись continue; } // Обновляю значение переменной prevValue == MyTable.MyField // собственно цикла ... } |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.08.2008, 15:13 | #5 |
Участник
|
Не до конца понял условие задачи. Ответ удалил
Последний раз редактировалось kashperuk; 06.08.2008 в 15:17. |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
06.08.2008, 15:17 | #6 |
Участник
|
Цитата:
table1.RecId < table2.RecId Поскольку условие на не равно выбросит вообще любые записи имеющие дубли. Ни одной не останется. |
|
06.08.2008, 15:19 | #7 |
Участник
|
Ого, как много успели наотвечать, вот за что и люблю сей светлый портал, спасибо всем большое. Я уже разорбрался, так как меня интересует только одно поле, сделал простую группировку, и очень рад, что вы, господа, предложили тот же способ, значит я не совсем безнадежен)))
__________________
Axapta has seduced me deadly! |
|
06.08.2008, 15:20 | #8 |
Участник
|
Да, через
X++: select from table1 notexistjoin table2 where table1.field1 == table2.field1 && table1.RecId < table2.RecId |
|
06.08.2008, 15:24 | #9 |
Участник
|
Да, кстати, способ с поправкой Владимира Максимова очень изящен в случае, если надо потом иметь все данные. Так сказать, в мемориз)
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 06.08.2008 в 15:28. |
|
06.08.2008, 15:31 | #10 |
Axapta
|
Да, но расскажи мне смысл такой выборки? Почему из повторяющихся записей мы выбираем ту, у которой reсId больше, а не меньше? Если все равно, какую выбирать, то какой в этом может быть смысл? Мы генератор случайных чисел пишем? Или имеется в виду, что значения остальных "важных" полей у таких записей совпадают? Но в этом случае структура БД неоптимальна. Или можно еще и по этим полям сгрупировать тоже.
|
|