#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