我有一个表,我需要在其中填充值,这些值使用给定的步长递增。此外,我还有一个range的概念,因此一定数量的步骤将适合范围内(不一定均匀)。一旦到达范围的末端,就需要进行循环过程。扭曲的是,我还需要计算我做了多少次循环,一旦达到给定的循环最大值,我需要重新设置循环的计数。由于这令人困惑,这里有一个说明。
让我们创建并填充一个简单的表:
IF OBJECT_ID('tempdb..#mytable') IS NOT NULL DROP TABLE
tempdb.dbo.#mytable
CREATE TABLE #mytable (
id INT IDENTITY(1,1),
iteration INT,
step INT
)
INSERT #mytable
DEFAULT VALUES
GO 20
现在让我们声明一些变量并使用它们来更新我们表中的数据(注意没有使用@max_iterations 变量,因为我不知道如何利用它以及我为什么要问我的问题):
DECLARE @step_size INT = 7,
@max_iteration_range INT = 40,
@max_iterations INT = 2
UPDATE #mytable
SET iteration = (id*@step_size)/@max_iteration_range,
step = (id*@step_size)%@max_iteration_range
SELECT * FROM #mytable
这是结果输出:
id iteration step
----------- ----------- -----------
1 0 7
2 0 14
3 0 21
4 0 28
5 0 35
6 1 2
7 1 9
8 1 16
9 1 23
10 1 30
11 1 37
12 2 4
13 2 11
14 2 18
15 2 25
16 2 32
17 2 39
18 3 6
19 3 13
20 3 20
我试图解决的问题反映在最后三行。由于我的@max_iterations 变量设置为 2,一旦我在“迭代”列中超过了这个值,我想回到 0 并重新开始。最后三行应该是:
id iteration step
----------- ----------- -----------
18 0 6
19 0 13
20 0 20
我很感激有关如何完成此任务的任何建议。
谢谢!
PS这个问题源于需要生成SQL Agent作业计划,这些计划间隔均匀,但必须以不低于每X小时/分钟一次的频率运行,等等。所以我不能只是继续增加开始时间。
再次感谢弗拉基米尔提供公式!完成我需要的正确方法是: