У меня есть 12 разных значений для идентификатора в двух разных наборах данных, а также начальные и конечные значения. То, что я хочу инициализировать, это взять начальное значение в качестве начального аргумента цикла и конечное значение в качестве последнего аргумента. Поиск ценностей, соответствующих им, и нахождение соотношения между последовательными. После нахождения коэффициентов, если первое отношение меньше второго, увеличьте счетчик.
Ниже я опубликовал пример набора данных:
В соответствии с набором данных, я ожидаю от алгоритма:
- сначала найдите два коэффициента, один для
Ratio1 = a[i]/b[i+1]
, а второй для Ratio2 = a[i+1]/b[i+2]
- , тогда, если
Ratio1 > Ratio2
, это считается для этого идентификатора
create table #sample_data1(
ID VARCHAR(10), a1 INT, a2 INT, a3 INT, a4 INT, a5 INT,
a6 INT, a7 INT, a8 INT, a9 INT, a10 INT, a11 INT, a12 INT,
startValue INT, endValue INT );
insert into #sample_data1 values
(1001,3,2,1,1,1,1,3,0,0,0,0,0,1,7),
(1002,1,2,3,4,0,0,0,1,2,3,0,0,1,12),
(1003,0,3,8,1,0,0,0,3,3,0,0,0,1,12),
(1004,0,1,2,4,4,0,0,0,0,0,0,0,1,9),
(1005,1,2,2,1,0,0,2,2,2,1,0,0,1,8);
create table #sample_data2(
ID VARCHAR(10), b1 INT, b2 INT, b3 INT, b4 INT, b5 INT,
b6 INT, b7 INT, b8 INT, b9 INT, b10 INT, a11 INT, b12 INT,
startValue INT, endValue INT );
insert into #sample_data2 values
(1001,7,6,4,0,2,2,3,0,9,0,0,0,1,7),
(1002,1,2,3,4,0,6,8,1,2,3,0,0,1,12),
(1003,4,3,2,1,0,0,0,3,3,0,0,0,1,12),
(1004,0,1,2,4,2,0,0,0,0,0,0,0,1,9),
(1005,1,2,2,1,0,9,2,2,2,1,0,0,1,8);
Expexted result:
Для ID = 1001
Шаг 1. Ratio1 = a1/b2 =3/6
равен 0.5
, а Ratio2 = a2/b3 = 2/4
равен 0.5
. коэффициент1 не больше, чем коэффициент2, поэтому он не считается .
Шаг 2. Для следующих Ratio1 = a2/b3 = 2/4 = 0.5
и Ratio2 = a3/b4 = 1/0
, поскольку он делит 0, мы принимаем его за 1
, тогда Ratio1 не больше, чем Ratio2, поэтому не считается .
Шаг 3. Для следующего Ratio1 = a3/b4 = 1/0
, поскольку он делит 0, мы принимаем его как 1
и Ratio2 = a4/b5 = 1/2 = 0.5
, затем Ratio1 > Ratio2
, затем , он считается как 1
.
Шаг 4. Для следующих Ratio1 = a4/b5 = 0.5
и Ratio2 = a5/b6=1/2 = 0.5
Ratio1 = Ratio2
это не считается
Шаг 5. Для следующих Ratio1 = a5/b6 = 0.5
и Ratio2 = a6/b7=1/3=0.34
Ratio1>Ratio2
так что считает, что счетчик становится 2
Шаг 6. Для следующих Ratio1 = a6/b7 = 0.34
и Ratio2 = a7/b8 =3/0
мы принимаем его как 1
Ratio1 не больше, чем Ratio2, поэтому не считается .
Шаг 7. Для следующих Ratio1 = a7/b8=1
и Ratio2 = a8/b9=0/9= 0
Ratio1 > Ratio2
затем считается, счетчик становится 3 для 'ID = 1001'
Поскольку мы достигли конечного значения 7, это будет наше окончательное значение счетчика для этого идентификатора. Этот процесс продолжается для остальных идентификаторов.
Спасибо за помощь!