Я не был слишком уверен, как сформулировать этот вопрос, поэтому вот подробности.Я использую трюк для вычисления расстояния Хэмминга между двумя цепочками битов.Вот запрос:
select length(replace(x::text,'0',''))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
По сути, он вычисляет xor между двумя строками, удаляет все 0 и возвращает длину.Это функционально эквивалентно расстоянию Хэмминга между двумя цепочками битов.К сожалению, это только возвращает расстояние Хэмминга и ничего больше.В таблице codeTable также есть столбец с именем person_id.Я хочу иметь возможность вернуть минимальное расстояние Хемминга и идентификатор, связанный с этим.Возврат минимального расстояния Хэмминга достаточно прост, просто добавьте min () вокруг части 'length'.
select min(length(replace(x::text,'0','')))
from (
select code # '000111101101001010' as x
from codeTable
) as foo
Это нормально, однако возвращает только расстояние Хэмминга, а не person_id.Я понятия не имею, что мне нужно сделать, чтобы вернуть person_id, связанный с этим расстоянием Хемминга.
Кто-нибудь знает, как это сделать?