您的位置:首页 > 数据库

开窗函数与where条件相结合的时候的问题思考

2017-06-23 17:04 387 查看

开窗函数与where条件相结合的时候的问题思考

以下分析where条件放在和开窗函数同一查询中,和放在外层查询中的差别。开发中需要格外注意where放的位置
代码如下:

select
code,
name
from
(select
code,
name,
data_opt_type,
active,
is_league_saledept,
row_number() over(partition by row_key order by data_opt_time desc) num1
from ecs.T_BSE_ORG_SALES_DEPARTMENT_real t3
)  t
where num1 = 1
and data_opt_type is null
and  active = 'Y'
and ( is_league_saledept ='N' or  is_league_saledept  is null)

以上sql涉及到子查询:因为表存在历史数据(时间拉链)的问题,所以需要对数据进行去重之后才能使用,故产生在使用开窗函数的时候使用where条件的数据筛选问题。

  简单分析:

现在需求是:对存在时间拉链的数据取出最新版本并符合指定条件的数据。

以上代码已经实现.  

1,内层子查询,做的是去重时间拉链的数据最新的版本,外层where条件是对最新版本的数据进行条件的筛选。

如果where条件放在子查询中:就是相当于不论数据版本的新旧,我只要符合条件的,再对符合条件的数据中,取出时间版本最新的。

    两种方式,分别采用不同的分级查询进行数据的处理,会产生数据差异很大的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库
相关文章推荐