SQL中消除具有相同$值但相隔一天的结果行的最佳方法



我有一个Oracle表,它看起来像下面的

>日期名称2021-01-01-500700[/tr>
地区 地点 $金额
1 位置1 500用户
1 位置12021-01-02用户A
2 位置22021-01-03用户B

您可以使用:

DELETE FROM table_name t
WHERE EXISTS (
SELECT 1
FROM   table_name x
WHERE  x.region = t.region
AND    x.location = t.location
AND    x.amount = -t.amount
AND    x."DATE" IN (t."DATE" - 1, t."DATE" + 1)
AND    x.name = t.name 
)

注意:DATE是一个关键字,除非使用带引号的标识符,否则不能将其用作列名

db<gt;小提琴这里

这就是您所描述的:

select t.*
from t
where not exists (select 1
from t t2
where t2.region = t.region and
t2.location = t.location and
t2.name = t.name and
t2.amount = - t.amount and
t2.date in (t.date - 1, t.date + 1)
);

然而,你可能需要考虑一下你是如何表达这个问题的。如果你有100/-100/100,会发生什么?您描述的逻辑(以及上面的查询(将删除所有三行。这可能就是你的意图。如果不是,你应该问一个新的问题。

注意:以上操作将从结果集中删除行。对于delete,很容易对此进行修改。

最新更新