【问题标题】:Include NULLs in MAX() OVER PARTITION在 MAX() OVER PARTITION 中包含 NULL
【发布时间】: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


【解决方案1】:

是的,你可以使用解析函数:

FIRST_VALUE(date_col) OVER (PARTITION BY name ORDER BY date_col DESC NULLS FIRST)

SQL-Fiddle

进行测试

【讨论】:

  • 我不能保证 NULL 将是 FIRST_VALUE。我已经修改了我的示例以表示一个不起作用的示例。
  • FIRST_VALUE() 将使用ORDER BY date_col DESC **NULLS FIRST**,而不是您显示数据的顺序。
猜你喜欢
  • 2018-09-01
  • 2020-09-22
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2018-07-25
相关资源
最近更新 更多