相关疑难解决方法(0)

我如何(或可以)在多列上选择DISTINCT?

我需要检索表中的所有行,其中2列组合都是不同的.因此,我希望所有在同一天没有任何其他销售的销售以相同的价格出售.基于日期和价格的唯一销售将更新为活动状态.

所以我在想:

UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
             FROM sales
             HAVING count = 1)
Run Code Online (Sandbox Code Playgroud)

但是我的大脑比那更远了.

sql postgresql distinct duplicates sql-update

382
推荐指数
4
解决办法
86万
查看次数

仅使用SQL返回pre-UPDATE列值 - PostgreSQL版本

我有一个相关的问题,但这是我的谜题的另一部分.

我想从UPDATEd的行中获取列的OLD VALUE - 不使用触发器(也不使用存储过程,也不使用任何其他额外的非SQL /查询实体).

我的查询是这样的:

   UPDATE my_table
      SET processing_by = our_id_info -- unique to this worker
    WHERE trans_nbr IN (
                        SELECT trans_nbr
                          FROM my_table
                         GROUP BY trans_nbr
                        HAVING COUNT(trans_nbr) > 1
                         LIMIT our_limit_to_have_single_process_grab
                       )
RETURNING row_id;
Run Code Online (Sandbox Code Playgroud)

如果我可以在子查询结束时执行"FOR UPDATE ON my_table",那将是devine(并修复我的其他问题/问题).但是,这不起作用:不能有这个AND"GROUP BY"(这对于计算trans_nbr的COUNT是必要的).然后我可以直接使用那些trans_nbr并进行查询以获得(即将成为)之前的processing_by值.

我尝试过这样做:

   UPDATE my_table
      SET processing_by = our_id_info -- unique to this worker
     FROM my_table old_my_table
     JOIN (
             SELECT trans_nbr
               FROM my_table
           GROUP BY trans_nbr
             HAVING COUNT(trans_nbr) > 1
              LIMIT our_limit_to_have_single_process_grab
          ) sub_my_table
       ON old_my_table.trans_nbr = sub_my_table.trans_nbr …
Run Code Online (Sandbox Code Playgroud)

sql postgresql subquery sql-update

42
推荐指数
3
解决办法
2万
查看次数

在PL / pgSQL中更新整行

我有plpgsql函数:

CREATE OR REPLACE FUNCTION test() RETURNS VOID AS
$$
DECLARE
    my_row my_table%ROWTYPE;
BEGIN
    SELECT * INTO my_row FROM my_table WHERE id='1';
    my_row.date := now();
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以直接更新my_row记录。

我现在发现要做的唯一方法是:

UPDATE my_table SET date=now() WHERE id='1';
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个示例函数,实际的函数要比这复杂得多。

我正在使用PostgreSQL 9.2。

更新:

对不起,我想说的是:

SELECT * INTO my_row FROM my_table INTO my_row WHERE id='1';
make_lots_of_complicated_modifications_to(my_row, other_complex_parameters);
UPDATE my_row;
Run Code Online (Sandbox Code Playgroud)

即使用my_ row将信息保留在基础表中。我有很多参数需要更新。

postgresql plpgsql sql-update

4
推荐指数
1
解决办法
9127
查看次数

标签 统计

postgresql ×3

sql-update ×3

sql ×2

distinct ×1

duplicates ×1

plpgsql ×1

subquery ×1