В такой строке кода нет ничего удивительного:
delete adjacent duplicates from lt_table.
Здесь всё просто и понятно. Дубликаты удаляются, уникальные записи остаются.
Однако если попытаться с помощью добавки comparing удалять дубликаты только по нужным полям, то есть свои тонкости:
delete adjacent duplicates from lt_bseg comparing lifnr zuonr.
Тонкость первая: Дубликаты могут и не совсем удалиться. Удаление будет происходить только в сортированной последовательности. Таким образом результат будет слабопредсказуемым. То есть из последовательности А-А-Б-Б-А-А будет создана последовательность А-Б-А.
Тонкость вторая: Дубликаты удаляются после первого совпадения. Таким образом во внутренней таблице будет оставлено именно первое совпадение.
Следовательно вместо вышеуказанного примера кода всегда следует писать примерно так:
sort lt_bseg by lifnr zuonr zfbdt.
delete adjacent duplicates from lt_bseg comparing lifnr zuonr.
Больше полей в операторе SORT даёт большую предсказуемость и адекватность результата. Добавка сортировки по дате (ZFBDT) уточняет, что останется самая ранняя (первая) запись из всех .
thanks!
Спасибо!