Подсчет коэффициента Смалера через две разные переменные - PullRequest
0 голосов
/ 14 июня 2019

У меня есть 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, это будет наше окончательное значение счетчика для этого идентификатора. Этот процесс продолжается для остальных идентификаторов.

Спасибо за помощь!

...