当前位置:Gxlcms > 数据库问题 > 浅谈DB2在线分析处理函数

浅谈DB2在线分析处理函数

时间:2021-07-01 10:21:17 帮助过:53人阅读

SELECT * FROM 2 (SELECT 3 DISTINCT RTRIM(A.RECORD_ID),RTRIM(A.PO_ID),RTRIM(A.ANT_ID),B.CAT_ID,B.EXTRACT_DT,ROW_NUMBER()OVER(PARTITION BY B.CAT_ID ORDER BY B.EXTRACT_DT DESC)RN 4 5 FROM 6 --retreve 100 POs for each CAT_ID for last year from BDW 7 (SELECT RECORD_ID,PO_ID,CAT_ID,EXTRACT_DT,ANT_ID FROM TEAME.PO_ITEM 8 WHERE CAT_ID IN (4Q6, 4W8, S86, S89, QU39, U4Q0, UQ41, UQ43, U89, W24, YQ44, QY45, QY50, Y5Q1, E0W4, 9 W72, 8Q3, 0W3,Q75,73, P74, 75, P76, 77E, P78,E03, E05, E06, E07, ED8 10 , WW9, E37, WW0, DD3, DS3, E65, 7S4, 45, CA1, 0QS4, W31, 64, 9A4, Y95, QY96) 11 --AND DATE(EXTRACT_DT) >= DATE(CURRENT_DATE - 365 DAYS) AND DATE(EXTRACT_DT) <= DATE(CURRENT_DATE) 12 )B, 13 IP.COM C, 14 TEAME.PO_IA POIA, 15 TEAME.PO A 16 17 LEFT OUTER JOIN TEAME.P_G_M D 18 ON 19 D.RECORD_ID = A.RECORD_ID AND 20 D.PRCHORG_ID = A.PRCHORG_ID AND 21 D.PRCHGRP_ID = A.PRCHGRP_ID AND 22 D.PRCHMEM_UNIQ_ID = A.PRCHMEM_UNIQ_ID 23 24 WHERE 25 A.RECORD_ID = B.RECORD_ID AND 26 A.PO_ID = B.PO_ID AND 27 A.ANT_ID = B.ANT_ID AND 28 A.RECORD_ID = POIA.RECORD_ID AND 29 30 A.PO_ID = POIA.PO_ID AND 31 B.CAT_ID = C.CORPCOMMCODE AND 32 (COMGROUP IN (J, D) 33 OR POIA.LEDGACCT_MINOR_NUM IN (123,422,1,21,324,123,442,123,FDF,FD)) 34 AND A.RECORD_ID > 35 AND DATE(A.EXTRACT_DT) >= DATE(CURRENT_DATE - 365 DAYS) AND DATE(A.EXTRACT_DT) <= DATE(CURRENT_DATE))RN 36 WHERE RN=1 37 WITH UR;

接下我们主要来看这一句:ROW_NUMBER()OVER(PARTITION BY B.CAT_ID ORDER BY B.EXTRACT_DT DESC)RN

ROW_NUMBER()这个函数是用来给查询结果集编号,

OVER是一个表达式,它的作用是定义一个作用域(或者可以说是结果集),OVER前面的函数只对OVER定义的结果集起作用,

PARTITION BY用来给结果集分组, 和group by一样。

ORDER BY对分组后子组按某列排序。

最后用条件WHERE RN=2得到买个分组后的每个小组的前两行。

 

除了这个函数,我们可以扩展一下,了解下其他常用函数:

rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).

dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。

相比之下row_number是没有重复值的,每组内部排序后的顺序编号(组内连续的唯一的)。

FIRST_VALUE,用来求OVER 定义集合的最小值

LAST_VALUE,用来求OVER 定义集合的最大值。值得注意的是这两个函数有个参数,‘IGNORE NULLS‘ 或 ‘RESPECT NULLS‘,用来忽略NULL值和考虑NULL值

 

OLAP所有其他函数:

ROW_NUMBER  
RANK  
DENSE_RANK  
FIRST_VALUE  
LAST_VALUE  
LAG  
LEAD  
COUNT  
MIN  
MAX  
AVG  
SUM 
ROW_NUMBER
RANK
DENSE_RANK
FIRST_VALUE
LAST_VALUE
LAG
LEAD
COUNT
MIN
MAX
AVG
SUM

浅谈DB2在线分析处理函数

标签:ber   style   rom   数据   分组   log   ack   led   总结   

人气教程排行