Pro mě funguje následující:
declare @TransactionDate DATETIME
DECLARE @TransactionDay tinyint
declare @startDate datetime
declare @startDay int
declare @NextTransactionDate datetime
--Monday
set @TransactionDate = '2011-05-05'
SET @TransactionDay = DATEPART(dw, @TransactionDate)
--Wednesday
set @startDate = '2011-04-27'
set @startDay = datepart(dw,@startDate)
set @NextTransactionDate= DATEADD(DAY, ((@startDay - @TransactionDay) + 7) % 7 ,@TransactionDate);
select @startDay, DATEPART(dw, @NextTransactionDate), @NextTransactionDate
Abych vysvětlil podstatu toho, nacházím rozdíl v dni v týdnu pro počáteční datum a datum transakce. Přidávám k tomu 14, protože záporná čísla modulo kladná čísla vedou k zápornému číslu, které by posunulo datum vaší další transakce do minulosti (a to nechcete). Nejhorší případ je, když @startDay je 1 a @TransactionDay je 7, což vede k rozdílu -6. Přidání 7 zajišťuje, že tento rozdíl je kladný, ale stále ve stejné třídě ekvivalence jako skutečný rozdíl v prstenci n mod 7 (omlouvám se... jsem tak trochu matematický pitomec).