【发布时间】:2016-10-08 08:09:55
【问题描述】:
WITH t AS (
SELECT 9 a
,sysdate d
,1 c
,1 e
FROM dual
UNION
SELECT 1 a
,sysdate - 5 d
,2 c
,1 e
FROM dual
UNION
SELECT 2 a
,sysdate - 2 d
,6 c
,1 e
FROM dual
UNION
SELECT 5 a
,sysdate - 4 d
,2 c
,1 e
FROM dual
UNION
SELECT 3 a
,sysdate - 1 d
,1 c
,1 e
FROM dual )
SELECT MAX(CASE
WHEN c = 2
THEN d
ELSE NULL
END) OVER (
PARTITION BY e ORDER BY d DESC ) DT1
,MAX(CASE
WHEN c = 2
THEN d
ELSE NULL
END) OVER (PARTITION BY e) DT2
,t.*
FROM t
问题: 在上面的查询中,我无法理解为什么在 DT1 中得到空值,而在 DT2 中没有。 Order By Clause 在解析函数 MAX 中的影响是什么?请帮助我理解这一点
结果:
DT || DT1 || A || D || C || E
NULL || 10/4/2016 0:03 || 9 || 10/8/2016 0:03 || 1 || 1
NULL || 10/4/2016 0:03 || 3 || 10/7/2016 0:03 || 1 || 1
NULL || 10/4/2016 0:03 || 2 || 10/6/2016 0:03 || 6 || 1
10/4/2016 0:03 || 10/4/2016 0:03 || 5 || 10/4/2016 0:03 || 2 || 1
10/4/2016 0:03 || 10/4/2016 0:03 || 1 || 10/3/2016 0:03 || 2 || 1
【问题讨论】:
-
你得到什么结果?
-
DT || DT1 ||一个 || D || C || E 空值 || 2016 年 10 月 4 日 0:03 || 9 || 2016 年 10 月 8 日 0:03 || 1 || 1 空 || 2016 年 10 月 4 日 0:03 || 3 || 2016 年 10 月 7 日 0:03 || 1 || 1 空 || 2016 年 10 月 4 日 0:03 || 2 || 2016 年 10 月 6 日 0:03 || 6 || 1 2016 年 10 月 4 日 0:03 || 2016 年 10 月 4 日 0:03 || 5 || 2016 年 10 月 4 日 0:03 || 2 || 1 2016 年 10 月 4 日 0:03 || 2016 年 10 月 4 日 0:03 || 1 || 2016 年 10 月 3 日 0:03 || 2 || 1
标签: sql oracle max analytic-functions