【发布时间】:2019-12-03 19:13:53
【问题描述】:
我有一个显示类型的表格(未显示所有列)。 typeid就是PK。有一些不应该存在的日期重叠。我想从我的查询中删除这些。
Custid typeid start_dt end_dt
101 352 3/28/2017 1/16/2019
101 353 1/15/2018 1/15/2019
数据显示如下(重叠示例)。
Custid typeid start_dt end_dt overlap
101 352 3/28/2017 1/16/2019 1
101 353 1/15/2018 1/15/2019 1
201 426 1/1/2019 12/31/9999 0
SQL。 (索引在所有上述表格列上)
select *
from (select
Custid,
typeid,
start_dt,
case
when end_dt > lead (start_dt) over (partition by custid order by start_dt) then 1
when start_dt < lag (end_dt) over (partition by custid order by start_dt) then 1
else 0
end overlap)
where overlap = 0
对 case 表达式的过滤会减慢查询返回结果的速度。有没有提高查询性能的提示/技巧?
【问题讨论】:
-
我不确定如何解释“索引在所有上述表格列上”。是否有一个索引涵盖所有列?或者每个单独的列都有一个单独的索引?还是别的什么?
-
@DaveCosta 为每列单独索引
标签: oracle indexing case where-clause query-hints