Я еще SQL салага и попытаться преобразовать этот сценарий, построение нарастающим итогом в целях в MySQL:MySQL нарастающим итогом в целях
DROP TABLE IF EXISTS `table_account`;
CREATE TABLE `table_account`
(
id int(11),
account int(11),
bdate DATE,
amount DECIMAL(10,2)
);
ALTER TABLE `table_account` ADD PRIMARY KEY(id);
INSERT INTO `table_account` VALUES (1, 1, '2014-01-01', 1.0);
INSERT INTO `table_account` VALUES (2, 1, '2014-01-02', 2.1);
INSERT INTO `table_account` VALUES (4, 1, '2014-01-02', 2.2);
INSERT INTO `table_account` VALUES (5, 1, '2014-01-02', 2.3);
INSERT INTO `table_account` VALUES (3, 1, '2014-01-03', 3.0);
INSERT INTO `table_account` VALUES (7, 1, '2014-01-04', 4.0);
INSERT INTO `table_account` VALUES (6, 1, '2014-01-06', 5.0);
INSERT INTO `table_account` VALUES (8, 1, '2014-01-07', 6.0);
SET @iruntot:=0.00;
SELECT
q1.account,
q1.bdate,
q1.amount,
(@iruntot := @iruntot + q1.amount) AS runningtotal
FROM
(SELECT
account AS account,
bdate AS bdate,
amount AS amount
FROM `table_account`
ORDER BY account ASC, bdate ASC) AS q1
Это гораздо быстрее, чем строить сумму за всю историю на каждой линии.
Проблемы, которые я не могу решить, являются:
- Набор в виду
- подзапросов в виду
Я думаю, что это может быть posssible использовать какой-то JOIN вместо «SET @iruntot : = 0,00;» и использовать два представления для предотвращения необходимости подзапроса. Но я знаю как.
Будем рады любым подсказкам. С уважением, Abraxas
Если вам нравится, рассмотрите следующий простой двухэтапный курс действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли более легко реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry
Привет, Strawberry, Я отредактировал мой вопрос, чтобы предоставить скрипт entre (проверен). Результат - это то, что мне нужно, но как представление не как запрос. – ABRAXAS