Просто направете проблемния DATEADD
на две стъпки, като се започне с по-груба единица за време (секунди, минути, часове и т.н.), след което се върне обратно към фино зърнеста единица за остатъка.
Избягвайте обаче да преминавате към ниво седмици и месеци, тъй като това ще изисква действителни календарни изчисления и бихме предпочели системата да се справи с това.
Примерът по-долу трябва да изчисли начално време при (евентуално) голяма текуща продължителност в милисекунди.
-- large durations can overflow the integer argument needed for DATEADD
-- so do as two steps subtracting minutes (60000ms) and then remaining milliseconds.
DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))