Есть ли агрегатная функция, которая могла бы возвращать первое ненулевое значение в группе?

Я использую Oracle XE 10g.

Прошу вас внимательно прочитать мой вопрос. У меня есть странный вариант использования этого, но, пожалуйста, смиритесь.

Допустим, у меня есть следующие записи:

Table person
Name  YearOfBirth
a     null
a     2001
a     2002
b     1990
b     null
c     null
c     2001
c     2009

Обычно, если я выполняю следующий запрос:

select
  p.Name, max(p.YearOfBirth)
from
  person p
group by
  p.Name

Это даст мне записи с разными именами, и каждое отдельное имя будет связано с максимальным значением YearOfBirth в своей группе.В данном примере группа, в которой Name = 'a', максимальное значение YearOfBirth равно 2002.

Если max () является агрегатной функцией, которая возвращает максимальное значение столбца в данной группе, существует ли функция, которая возвращает первое значение в группе , которое не является нулевым? Вместо того, чтобы указывать максимальное значение, мне нужно первое значение, которое вы можете найти, если оно не равно нулю.

Пожалуйста, не спрашивайте меня, почему я не могу просто использовать вместо них min () или max ().

Очевидно, я не могу использовать здесь rownum, как некоторые могут предположить, потому что это ограничит количество групп, которые я могу получить.

6
задан supertonsky 17 October 2011 в 03:55
поделиться