最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

利用Oracle分析函数LAG求时间段内的本期、同比、环比值

来源:动视网 责编:小采 时间:2020-11-09 15:25:04
文档

利用Oracle分析函数LAG求时间段内的本期、同比、环比值

利用Oracle分析函数LAG求时间段内的本期、同比、环比值:with time_dim as (select add_months(add_months(date'2013-7-1',-12),(rownum-1)) dim_month from dual connect by level =months_between(date'2014-1-1',date'2012-7-1')+1)select t.dim_month, t.c_count, nvl(t.ly_count,0) ly_count, nvl(t.lm_count,
推荐度:
导读利用Oracle分析函数LAG求时间段内的本期、同比、环比值:with time_dim as (select add_months(add_months(date'2013-7-1',-12),(rownum-1)) dim_month from dual connect by level =months_between(date'2014-1-1',date'2012-7-1')+1)select t.dim_month, t.c_count, nvl(t.ly_count,0) ly_count, nvl(t.lm_count,


with time_dim as (select add_months(add_months(date'2013-7-1',-12),(rownum-1)) dim_month from dual connect by level =months_between(date'2014-1-1',date'2012-7-1')+1)select t.dim_month, t.c_count, nvl(t.ly_count,0) ly_count, nvl(t.lm_count,

with time_dim as 
(select add_months(add_months(date'2013-7-1',-12),(rownum-1)) dim_month
 from dual connect by level <=months_between(date'2014-1-1',date'2012-7-1')+1)
select t.dim_month,
 t.c_count,
 nvl(t.ly_count,0) ly_count,
 nvl(t.lm_count,0) lm_count
 from
 (select t1.dim_month, 
 nvl(t2.c_count,0) c_count,
 lag(t2.c_count,1,0) over(order by t1.dim_month) ly_count,
 lag(t2.c_count,12,0) over(order by t1.dim_month) lm_count 
 from time_dim t1
 left join test_lzc t2
 on t1.dim_month = t2.dim_month) t
 where t.dim_month between date'2013-7-1' and date'2014-1-1'
order by 1 desc;


Oracle 分析函数LAG是用来求结果集中前一个值作为新的列的值得一个函数,效率很高。可以利用此分析函数来秒求环比和同比的值,但这其中也有些问题。LAG分析函数语法结构如下:

LAG(EXPRESSION,[OFFSET],[DEFAULT]) OVER([PATITION BY COLUMN1...] ORDER BY COLUMN1...);

其中offset是偏移量,指的是在结果集中向前第OFFSET个值。

问题:

1、如果基表中有的月份缺失,那么他就会把缺失的那部分月份漏查,直接再找前一个的值。

2、如果加入了时间筛选那么最前面的值得环比值,和所有结果集中的同比值全会找不到。

解决方案:

初始化一个时间维度,与基表关联,补全所有的月份,缺失的月份数值值为零。 以销售额为例,SQL如下:

文档

利用Oracle分析函数LAG求时间段内的本期、同比、环比值

利用Oracle分析函数LAG求时间段内的本期、同比、环比值:with time_dim as (select add_months(add_months(date'2013-7-1',-12),(rownum-1)) dim_month from dual connect by level =months_between(date'2014-1-1',date'2012-7-1')+1)select t.dim_month, t.c_count, nvl(t.ly_count,0) ly_count, nvl(t.lm_count,
推荐度:
标签: 利用 计算 时间段
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top