@RiantHoff

Существует ли готовая функция в PL/SQL (Oracle SQL) для выбора значения в поле1 из нескольких имеющихся строк в таблице, отличающихся в дате в поле2?

База данных Oracle.
Язык PL/SQL.
Имеются права только писать запросы select.
В таблице table_name есть строки в количестве от нуля до нескольких строк вида:
key		field_name	date_field		person_key
---		---		---			---
3		Thom		01.01.1947		43464
7		Emma		02.02.2001		43464
5		Elza		07.07.1980		43464
4		Nelson		03.03.1955		32543

Допустим это имена родственников с датами рождения.
Нужно выбрать имя самого молодого родственника персоны 43464. Если родственников нет, то выдавать "noname", например.

Существует ли какая-то стандартная функция, которая выдала бы имя?

function_name(table_name, field_name, date_field, 43464) = "Emma"

А если нет, то каким запросом эффективнее (наименее затратно по времени) получить результат?
Спасибо.
  • Вопрос задан
  • 3103 просмотра
Пригласить эксперта
Ответы на вопрос 3
@pihel
Sql, Oracle, pl/sql, BI, ETL, php, olap
Почитайте про KEEP (DENSE_RANK FIRST ORDER BY date_field ASC) или про OVER (PARTITION BY person_key ORDER BY date_field)
Ответ написан
Комментировать
На сколько я понял вопрос вам нужен примерно такой результат:

SQL> select * from cawa.qqq where PERSON_KEY=43464 and DATE_FIELD=( select max (DATE_FIELD) from cawa.qqq where PERSON_KEY=43464 );

KEY FIELD_NAME DATE_FIELD PERSON_KEY
---------- -------------------------------------------------- ------------------- ----------
7 Emma 02-02-2001 00:00:00 43464
Ответ написан
@RiantHoff Автор вопроса
А еще лучше получить сразу по всем персонам результат вида:

person_key, field_name

43464, "Emma"
32543, "Nelson"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы