浅谈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 总结