Я уверен, что данные могут регулярно изменяться в этих таблицах, и поскольку всегда можно вводить исторические записи, которые отбрасывают любые функции ранжирования или номера строк, вероятно, было бы лучше пойти по маршруту, который использует operatorid и bookkeeping_dateв тандеме для создания уникального ключа.
Одним из простых подходов было бы преобразование даты в целочисленное значение и добавление operatorid до конца.
1/1/2018 становится «43099».Operatorid 1 становится равным «1» в конце (или «01» / «001» / «0001», если эти идентификаторы могут стать большими целыми числами).
select
convert(int, convert(varchar(6), convert(int, (convert(datetime,replace(bookkeeping_date,'.','-'),110))))
+ convert(varchar(2), operatorid)) as unique_id
from (select 1 as operatorid, 1 as opcode, '01.01.2018' as bookkeeping_date, 3.50 as tip_amount) tip
У вас будет несколькоза столетия до того, как целые числа даты достигают шести цифр и могут вызвать некоторые осложнения, но вы также можете преобразовать целое число даты во что-то с конечными нулями, чтобы учесть это, если это вызывает озабоченность.