【发布时间】:2014-01-22 17:43:17
【问题描述】:
我有一个 Oracle 查询,我想在合并 NULL 的同时通过 PARTITION 返回一个 MAX()。
例如,如果原始数据是:
姓名 |日期 ---------------------- 亚当 | 2014 年 1 月 21 日 00:00 亚当 | 亚当 | 2014 年 1 月 22 日 00:01 亚当 | 2014 年 1 月 23 日 00:02使用以下查询返回以下内容:
MAX(date) OVER (PARTITION BY name ORDER BY date)
姓名 |日期
----------------------
亚当 | 2014 年 1 月 21 日 00:00
亚当 | 2014 年 1 月 22 日 00:01
亚当 | 2014 年 1 月 23 日 00:02
亚当 | 2014 年 1 月 23 日 00:02
是否可以让它表现得好像 NULL 是一个 MAX() 值,所以它会返回以下内容?
姓名 |日期 ---------------------- 亚当 | 2014 年 1 月 21 日 00:00 亚当 | 亚当 | 亚当 |【问题讨论】:
-
Any Aggregate function Ignores
NULL!(COUNT除外),所以如果你只想要NULL,需要做NVL() -
@MaheswaranRavisankar 这些是分析函数,而不是聚合函数。
-
@DavidAldridge 是的,处理行的方式仍然只让位给
NULL..MAX()永远不会考虑null...不是我对吗?当NULLS FIRST给出时..MAX(NULL)将首先发生,显然是NULL 而不是MAX(NULL,'A')返回了NULL.. -
@McArthey 但是你必须先将
01/22/13 00:00设为什么逻辑? -
是的,@MaheswaranRavisankar 提出了一个很好的观点。您的最后一次更新毫无意义。为什么有些行应该显示 NULL 作为结果而其他行没有?您不希望每个
PARTITION BY name获得相同的结果吗?
标签: sql oracle oracle10g window-functions analytic-functions