【发布时间】:2015-08-29 13:50:20
【问题描述】:
所以数据是这样的:
ID | START_DATE | END_DATE | UID | CANCELED
-------------------------------------------------
44 | 2015-10-20 22:30 | 2015-10-20 23:10 | 'one' |
52 | 2015-10-20 23:00 | 2015-10-20 23:30 | 'one' |
66 | 2015-10-21 13:00 | 2015-10-20 13:30 | 'two' |
这些条目超过 100k。
我们可以看到第二个条目的 start_date 与第一个条目的 end_date 重叠。当日期确实重叠时,ID 较低的条目应在“CANCELED”列中标记为 true。
我尝试了一些查询,但它们需要很长时间,所以我不确定它们是否有效。另外我想涵盖所有重叠的情况,所以这似乎也减慢了速度。
我是负责使用 pl/sql 插入/更新这些条目的人
update table set column = 'value' where ID = '44';
if sql%rowcount = 0
then insert values(...)
end if
所以我也许可以在这一步中做到这一点。但是所有表都使用动态创建的一个大 pl/sql 更新/插入,其中所有行要么更新要么插入新行,所以这似乎又变慢了。
在所有 sql '方言' oracle 中,我有机会使用的最神秘的一个。想法?
编辑:我忘记了一个重要细节,还有一列(UID)要匹配,在上面更新
【问题讨论】: