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

开窗函数与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条件放在子查询中:就是相当于不论数据版本的新旧,我只要符合条件的,再对符合条件的数据中,取出时间版本最新的。

    两种方式,分别采用不同的分级查询进行数据的处理,会产生数据差异很大的结果。

你可能感兴趣的:(oracle数据库)