FIRST в Oracle SQL — как выбирать первую строку

🟢 FIRST в Oracle SQL. Введение

Когда необходимо получить первое значение в пределах группы или набора строк, на помощь приходит ключевое слово FIRST, используемое в аналитических функциях Oracle SQL. Оно позволяет удобно извлекать первую строку в пределах PARTITION или сортировки.

FIRST часто используется в сочетании с:

  • KEEP DENSE_RANK FIRST

  • FIRST_VALUE()

  • FETCH FIRST ROWS (ограничение)


🔤 Написание

Пример 1:

sql
SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY hire_date) AS first_salary
FROM employees
GROUP BY department_id;

Пример 2:

sql
SELECT FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_in_dept
FROM employees;

🔄 Где используется

  • Получение первого значения в группе

  • Анализ данных в хронологическом порядке

  • Поиск первой записи по критерию

  • Статистика и агрегаты по первым строкам

  • Фильтрация с FETCH FIRST ROWS (начиная с Oracle 12c)


🧪 10 Примеров использования FIRST

1️⃣ Первая зарплата в отделе по дате

sql
SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY hire_date) AS first_salary
FROM employees
GROUP BY department_id;

2️⃣ Первая дата найма в департаменте

sql
SELECT department_id,
FIRST_VALUE(hire_date) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_hired
FROM employees;

3️⃣ Получить первого сотрудника по дате

sql
SELECT *
FROM (
SELECT * FROM employees ORDER BY hire_date
)
WHERE ROWNUM = 1;

4️⃣ FETCH FIRST 1 ROW ONLY (Oracle 12c+)

sql
SELECT * FROM employees
ORDER BY hire_date
FETCH FIRST 1 ROW ONLY;

5️⃣ FIRST_VALUE с аналитикой по зарплате

sql
SELECT employee_id,
salary,
FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_salary
FROM employees;

6️⃣ Последовательное применение FIRST с разными ORDER BY

sql
SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct DESC) AS top_salary_with_commission
FROM employees
GROUP BY department_id;

7️⃣ Использование FIRST с PIVOT

sql
SELECT *
FROM (
SELECT department_id, salary FROM employees
)
PIVOT (
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY hire_date)
FOR department_id IN (10, 20, 30)
);

8️⃣ Первый заказ клиента по дате

sql
SELECT customer_id,
FIRST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY order_date) AS first_order
FROM orders;

9️⃣ Получить только первую строку по ключу

sql
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY hire_date) AS rn
FROM employees
)
WHERE rn = 1;

🔟 Комбинация FIRST_VALUE и LAST_VALUE

sql
SELECT employee_id,
FIRST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_salary,
LAST_VALUE(salary) OVER (PARTITION BY department_id ORDER BY hire_date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_salary
FROM employees;

🧩 Заключение

Ключевое слово FIRST — это мощный инструмент для выборки первых значений внутри групп или отсортированных наборов данных. Использование его в аналитических функциях и агрегатах делает запросы гибкими и точными.

💡 Запомни:

  • KEEP DENSE_RANK FIRST — агрегаты по первым строкам

  • FIRST_VALUE() — аналитическая функция

  • FETCH FIRST ROWS — ограничение на количество строк (12c+)

  • Идеально для отчётов, топов, первой активности


🔜 Следующая статья:

FILE в Oracle SQL — как обращаться к внешним файлам


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии