DECLARE @FromDate AS DATE = '20180501', @ToDate AS DATE = '20180531', @WeekDay TINYINT = 6, @Nth INT = 2; SELECT DATEADD(DAY, CASE WHEN @Weekday < CurrentStartDate % 7 THEN CurrentStartDate - CurrentStartDate % 7 + @Weekday + 7 ELSE CurrentStartDate - CurrentStartDate % 7 + @Weekday END, CAST('00010101' AS DATE)) AS theDate FROM ( SELECT CASE WHEN @Nth >= 1 THEN DATEDIFF(DAY, '00010101', @FromDate) + 7 * @Nth - 7 ELSE DATEDIFF(DAY, '00010101', @ToDate) + 7 * @Nth + 1 END AS CurrentStartDate WHERE ABS(@Nth) BETWEEN 1 AND 521722 AND @WeekDay BETWEEN 0 AND 6 ) AS t WHERE CASE WHEN @Weekday < CurrentStartDate % 7 THEN CurrentStartDate - CurrentStartDate % 7 + @Weekday + 7 ELSE CurrentStartDate - CurrentStartDate % 7 + @Weekday END BETWEEN DATEDIFF(DAY, '00010101', @FromDate) AND DATEDIFF(DAY, '00010101', @ToDate);