我有一个有3列(id,amount,time)的表。该表基于id按升序排列。我想删除除第一个之外的amount列中具有相同值的所有连续行。
例如:
id: 12,15,16,17,19,22
amount: 555,546,546,53,53,500
time:
回答:
id:12,15,17,22 amount: 555,546,53,500 time:
只要连续行在amount列中具有相同的值,连续行的时间列就相同。我搜索了SO,但找不到类似的问题
你可以使用lag()
:
select t.*
from (select t.*, lag(amount) over (order by id) as prev_amount
from t
) t
where prev_amount is distinct from amount;
这可能不是一种有效的方法,但如果你有大表(> 200万行)它会更快。
Copy
表格为csv格式,金额列为DISTINCT
:
\COPY (SELECT DISTINCT ON (amount) * FROM Tablename) to '/home/user/table.csv' with csv delimiter ',';
Truncate
上表:
TRUNCATE TABLE Tablename;
\COPY Tablename from '/home/user/table.csv' with csv delimiter ',';
我尝试删除重复项,但我花了一天时间完成查询。这种方法很适合我。