Mysql как суммировать столбец с суммой предыдущего столбца

#mysql #sql #math #xls

#mysql #sql #математика #xls

Вопрос:

В XLS у меня есть два столбца A и B.

 A,B

1,1
2,3
2,5
1,6
5,11
2,13
  

Столбец A имеет значение, а столбец B вычисляется по формуле (A (значение предыдущей строки B))

Как я могу выполнить это вычисление в MYSQL?

Я пытаюсь дважды объединить одну и ту же таблицу, и я могу получить предыдущие строки в столбце рядом с B.

Я могу суммировать их, но как я могу суммировать их с помощью этой формулы?

Формула XLS выглядит следующим образом:

 H20 = H19 G20
  

Это мой SQL, созданный из предложений.

 SELECT 
    date, time, sum, @b := sum @b as 'AccSum', count 
FROM 
   (SELECT 
        t.date, t.time, t.sum, t.count 
    FROM TMP_DATA_CALC t 
    ORDER BY t.epoch) as tb
CROSS JOIN
    (SELECT @b := 0) AS var
;
  

Комментарии:

1. Пожалуйста, отправьте запрос MySQL, который вы используете для получения выходных данных. Это можно сделать с помощью объединения с подзапросом, возможно, если у вас есть конкретный ORDER BY , который будет надежно возвращать тот же вид. В противном случае строки результатов SQL не имеют знаний или отношения к строкам, которые предшествуют им или следуют за ними. Каждая строка является самостоятельной сущностью, хотя вы, возможно, применили сортировку. Таким образом, динамическая электронная таблица на самом деле не очень хорошо соотносится с SQL.

Ответ №1:

 SELECT A, @b := A @b AS B
FROM (SELECT A
      FROM YourTable
      ORDER BY id) AS t
CROSS JOIN
    (SELECT @b := 0) AS var
  

Пользовательская переменная @b содержит значение B из предыдущей строки, что позволяет добавлять к нему текущие строки A .

ДЕМОНСТРАЦИЯ

Ответ №2:

http://sqlfiddle.com /#!2/74488/2/1 показывает, как выбрать данные.

 SET @runtot:=0;
Select a,b, @runtot:=@runtot a from b 
  

Однако есть основная проблема, которую я не могу понять. Поскольку у вас нет определенного порядка, SQL может выполнять этот порядок любым способом, поэтому вы можете не получить желаемых результатов.. без определенного порядка ваши результаты могут быть непредсказуемыми.

runtot = текущий итог.

Ответ №3:

В MySQL у нас нет такой функции, как partition, с помощью которой Oracle имеет. Вы можете использовать curser для достижения ваших требований. Или мы можем написать любую функцию, которая получит rownumber в качестве входных данных, затем добавит эти два значения, а затем вернет их в запрос.

выберите b из xsl limit rownum-1,1 выберите a из xsl limit rownum,1