首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何编写一个迭代函数,将当前行输出作为上一行输出的基础?

我如何编写一个迭代函数,将当前行输出作为上一行输出的基础?
EN

Stack Overflow用户
提问于 2019-04-19 21:49:49
回答 1查看 73关注 0票数 4

我需要确定我的当前行值是正数还是负值,这是起始值、计划增加和日减少的函数(取决于上一天的输出值是正还是负)。

我只知道第一天的起始数,我的增加时间表,如果是正的还是负的,我的递减值。

如果“日前产出”+“今日计划增加额”为正,则如果“前一天产出”+“今日计划增加额”为负值,则“前一天产出”+“今日计划增加额”-2(递减值),则“前一天产出”+“今日计划增加额”-1(递减值)

我什么都没试过,因为我想不出一种代数的方法来实现这一点。新的迭代函数或循环。

以下是我必须首先处理的数据:

以下是我想结束的内容:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-23 15:35:40

我相信我有个解决办法给你。

注意:,您有一个规定,如果start_val是正数(>= 0),则将递减设置为2,但是,在输出示例的Day 11中,将递减设置为1 where start_val + increase = 0

此解决方案将与示例输出相匹配,该输出认为0是负的。这在设置new_dec的段中很容易改变。只需将=移动到适当的位置即可。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION update_vals()
RETURNS SETOF test
AS
$$
DECLARE
    new_dec     integer;
    new_end     integer;
    new_start   integer;
    rec         record;
BEGIN
    FOR rec IN
        SELECT * FROM test
    LOOP
        new_start := NULL::integer;

        IF rec.start_val IS NULL
        THEN
            SELECT end_val
            INTO new_start
            FROM
            (
                SELECT MAX(id) last_id FROM test WHERE id < rec.id
            ) a
            JOIN test ON id = a.last_id
            ;
        END IF;

        IF COALESCE(rec.start_val, new_start) + rec.increase > 0
        THEN
            new_dec := 2;
        ELSIF COALESCE(rec.start_val, new_start) + rec.increase <= 0
        THEN
            new_dec := 1;
        END IF;

        new_end := COALESCE(rec.start_val, new_start) + rec.increase - new_dec;

        IF new_start IS NOT NULL
        THEN
            RETURN QUERY
            UPDATE test
            SET (start_val, decrement, end_val) = (new_start, new_dec, new_end)
            WHERE id = rec.id
            RETURNING *
            ;
        ELSE
            RETURN QUERY
            UPDATE test
            SET (decrement, end_val) = (new_dec, new_end)
            WHERE id = rec.id
            RETURNING *
            ;
        END IF;
    END LOOP;
END;
$$ LANGUAGE PLPGSQL;

这里是一个用来演示工作示例的副手.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55768214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档