我需要检索表中的所有行,其中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语句,它找到重复项并删除它们,但它需要永远运行.有没有其他方法可以解决这个问题?也许备份表,然后在添加约束后恢复?
sql postgresql duplicate-removal unique-constraint sql-delete
我有桌子
CREATE TABLE meta.fk_payment1
(
id serial NOT NULL,
settlement_ref_no character varying,
order_type character varying,
fulfilment_type character varying,
seller_sku character varying,
wsn character varying,
order_id character varying,
order_item_id bigint,
....
);
Run Code Online (Sandbox Code Playgroud)
我从csv文件插入数据,其中所有列都相同而不是id列
如果csv文件上传的次数超过一次,则数据将重复.
但是id不会,而id是主键.
所以我想删除所有重复的行而不使用主键.
我必须在单桌上这样做
有没有办法为表记录生成某种有序标识符?
假设我们有两个线程在进行查询:
线程1:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'hello');
commit;
Run Code Online (Sandbox Code Playgroud)
线程2:
begin;
insert into table1(id, value) values (nextval('table1_seq'), 'world');
commit;
Run Code Online (Sandbox Code Playgroud)
完全可能(取决于时间)外部观察者会看到(2,'世界')记录出现在(1,'你好')之前.
这很好,但是我想要一种方法来获取自上次外部观察者检查它以来出现的'table1'中的所有记录.
那么,有没有办法按照插入的顺序获取记录?也许OID可以提供帮助?