Задачка

Автор Manrus, 07 октября 2020, 03:32:08

« назад - далее »

Manrus

Второй день на ней бьюсь не понимаю, что делаю не так.
Суть задачи: Есть исходная таблица(дата, приход, расход), необходимо найти остатки на каждый день, даже если не было движения(Приход, расход).
Я дошел до того, что использую функцию peek и понимаю, что перед вычислением остатка нужно с join исходную таблицу с календарем, но не понимаю как это сделать..
По итогу нужно получить:
Даты текущего года и остаток.
Мой максимум на последнем скрине 

admin


govorun

Примерно так:

// Создаем календарь............................................
KALRNDAR:
LOAD * INLINE [Дата
01.01.2020];

FOR i = 1 TO 365
    NoConcatenate
    LOAD *
    RESIDENT KALRNDAR;

    Concatenate (KALRNDAR)
    LOAD DATE(MAX(Дата)+1) AS Дата
    RESIDENT KALRNDAR;
NEXT;

//Объединяем данные таблицы с календарем.......................

LEFT JOIN (KALRNDAR)
LOAD
    Дата,
    Приход,
    Расход,
FROM //ПУТЬ К ВАШЕЙ ТАБЛИЦЕ
;

// Просавляем "0" если в поле Приход или Расход нет значения (NULL)
// и сортируем по полю Дата в порядке возрастания

NoConcatenate
TABLE_1:
LOAD
    Дата,
    IF(ISNULL(Приход), 0, Приход) AS Приход,
    IF(ISNULL(Расход), 0, Расход) AS Расход
RESIDENT KALRNDAR
ORDER BY Дата;
DROP TABLE KALRNDAR;

// Создаем таблицу с остатками.................................

NoConcatenate
TABLE_2:
LOAD
    Дата,
    Приход,
    Расход,
    IF(ROWNO() = 1, Приход - Расход, PREVIOUS(Остаток) + Приход - Расход) AS Остаток
RESIDENT TABLE_1;
DROP TABLE TABLE_1;

// Сохраняем таблицу в файл

STORE [TABLE_2] INTO // ПУТЬ К ПАПКЕ СОХРАНЕНИЯ



Manrus

Спасибо за ответ, единственное что хотелось добавить  вместо PREVIOUS(Остаток) пришлось использовать peek(Остаток)
Цитата: govorun от 07 октября  2020, 11:30:33  Примерно так:


NoConcatenate
TABLE_2:
LOAD
    Дата,
    Приход,
    Расход,
    IF(ROWNO() = 1, Приход - Расход, PREVIOUS(Остаток) + Приход - Расход) AS Остаток
RESIDENT TABLE_1;
DROP TABLE TABLE_1;

// Сохраняем таблицу в файл

STORE [TABLE_2] INTO // ПУТЬ К ПАПКЕ СОХРАНЕНИЯ



govorun

Цитата: Manrus от 08 октября  2020, 01:50:19  пришлось
А почему "пришлось"? Чем PREVIOUS не подошел?

Яндекс.Метрика