使用更改变量更新查询

时间:2017-01-07 01:08:12

标签: sql postgresql variables

我正在尝试填充一个用于区分轮班的列。最理想的是,此列将填充文本值ShiftStartTimeDate_UnitCode_ShiftCount。我的班次规则是,如果单位发生变化,或者如果时间间隔超过6小时,则会开始新的班次。我正在使用非常大的表格,所以我不想遍历所有记录。 我想在下面的例子中推导出shift字段:

|str_time        |unitcode|next_unitcode|time_diff|shift                |
|________________|________|_____________|_________|_____________________|
|2015-08-26 10:52|A       |A            |1:00     |2015-08-26 10:52_A_1 |
|2015-08-26 11:52|A       |A            |1:00     |2015-08-26 10:52_A_1 |
|2015-08-26 18:52|A       |A            |7:00     |2015-08-26 18:52_A_2 |
|2015-08-26 19:52|A       |B            |1:00     |2015-08-26 18:52_A_2 |
|2015-08-26 06:52|B       |B            |-13:00   |2015-08-26 06:52_B_1 |
|2015-08-26 10:52|B       |B            |4:00     |2015-08-26 06:52_B_1 |
|2015-08-26 11:52|B       |B            |1:00     |2015-08-26 06:52_B_1 |
|2015-08-26 12:52|B       |C            |1:00     |2015-08-26 06:52_B_1 |
|2015-08-26 14:52|C       |C            |2:00     |2015-08-26 14:52_C_1 |
|2015-08-26 22:52|C       |C            |8:00     |2015-08-26 22:52_C_2 |
|2015-08-27 02:52|C       |C            |4:00     |2015-08-26 22:52_C_2 |
|2015-08-27 09:52|C       |C            |7:00     |2015-08-27 09:52_C_3 |
|2015-08-27 10:52|C       |D            |1:00     |2015-08-27 09:52_C_3 |
|2015-08-27 11:52|D       |D            |1:00     |2015-08-27 11:52_D_1 |
|2015-08-27 12:52|D       |D            |1:00     |2015-08-27 11:52_D_1 |

我觉得我越来越近了:

CREATE OR REPLACE FUNCTION calc_shift()
RETURNS void AS
$$
DECLARE
    shiftInt integer;
BEGIN       
    UPDATE public.top10
        SET shift = str_time || '_' || unitcode || '_' || shiftInt, shiftInt =: (CASE
            WHEN 
                public.top10.unitcode <> public.top10.next_unitcode  
            THEN 
                0
            ELSE
                CASE
                    WHEN 
                        public.top10.time_diff >= '06:00:00'
                    THEN
                        shiftInt
                    ELSE 
                        shiftInt+1
                END
        END);
END;
$$
LANGUAGE 'plpgsql'

我的逻辑似乎有点奏效。但是,根据需要,我很难增加和调整shiftInt变量。知道我做错了什么吗?

由于

0 个答案:

没有答案