执行一个更新查询,如果条件为True,则为False;如果条件为False,则为False

时间:2018-11-16 11:55:45

标签: sql postgresql

我需要编写一个存储过程,该过程可以将我的客户归还给特定的细分市场,因为他们在特定时间范围内的购买行为。

对于这些客户,segment(细分)字段将设置为true,如果他们的细分为true,则没有从给定查询中出现的客户需要设置为false。

我对程序本身有问题,我认为返回类型可以帮助您。

是否可以将不从查询中得出的值设置为FALSE而不使用临时表?

CREATE OR REPLACE FUNCTION segment_men1() AS

RETURNS void AS
$BODY$
BEGIN
FOR r IN
SELECT AD.id FROM account AD
    INNER JOIN transactions TRA ON TRA.customerID = AD.id
        WHERE AD.gender = "male"
        AND TRA.transactionDate >= current_date - interval "365" days;

    LOOP
        UPDATE account
        SET Segment_Men = true
        WHERE NEXT r;

    END LOOP;
RETURN;

END
$BODY$
LANGUAGE 'plpgsql';

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

为什么要为此使用循环?只需直接进行更新即可:

UPDATE account AD
    SET Segment_Men = true
    FROM transactions TRA 
    WHERE TRA.customerID = AD.id AND
          AD.gender = 'male' AND
          TRA.transactionDate >= current_date - interval '365' days;