powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какой есть аналог CROSS APPLY?
18 сообщений из 18, страница 1 из 1
Какой есть аналог CROSS APPLY?
    #39452362
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Периодически возникает задача найти N последних (упорядоченных по дате) значений.
К примеру, есть таблица фактов типа дата-значение. Как это правильно делается в Oracle?
Учебный пример - заказчики и их заказы.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
-- 3 most recent orders for each customer
SELECT C.custid, A.orderid, A.orderdate
FROM Sales.Customers AS C
  CROSS APPLY
    (SELECT TOP(3) orderid, empid, orderdate, requireddate 
     FROM Sales.Orders AS O
     WHERE O.custid = C.custid
     ORDER BY orderdate DESC, orderid DESC) AS A;


ЗЫ Пардон за вопрос новичка, уже неделю изучаю курс специалиста - там не видел ответа.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39452413
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозгЗЫ Пардон за вопрос новичка, уже неделю изучаю курс специалиста - там не видел ответа.

Ты бы доку читал Using CROSS APPLY and OUTER APPLY Joins: Examples

SY.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453152
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозг,

lateral/subquery
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453504
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LATERAL Inline Views, CROSS APPLY and OUTER APPLY появились, насколько помню, в 12.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453533
IgorSm,

lateral можно и раньше, чем 12с, но через танцы с бубнами (set event 22829)...
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453557
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и в коллекцию, чтобы не было вопросов как реализовать TOP (MS SQL) в Oracle
Код: plsql
1.
2.
3.
4.
SELECT *
FROM (your ordered query) alias_name
WHERE rownum <= Rows_to_return
ORDER BY rownum;



https://www.techonthenet.com/oracle/questions/top_records.php
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453559
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorSmкак реализовать TOP (MS SQL) в OracleЧудак, RTFM Changes in Oracle Database 12c Release 1 (12.1.0.1) (FAQ)
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453565
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
я нищий чудак :) Нет у меня выше 11-й версии.
Спасибо за ликбез
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453566
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Да и смутила его тема
Насколько важны различия между современными версиями ORACLE и ORACLE 10g XE?
Может до сих пор с 10 кой мается
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453567
IgorSmкак реализовать TOP (MS SQL) в Oraclelateral/cross apply в предполагаемой версии есть, а fetch first еще не поддерживается?
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453569
IgorSm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
row_number partition by,

я вот , если честно вообще не понимаю, что автор сего топика хочет. Такое ощущение, что он взял книгу по MS SQL. И пытается при ее помощи писать на Oracle.
Да и версия Oracle неизвестна
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453728
Фотография мегамозг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня версия 10g XE.
11g XE установить не получилось (и, как я вижу, установить по-простому на рабочий компьютер не получится), а 12, как я понял, бесплатной нету.
Собираю пока информацию об особенностях.
Может есть где-то онлайн бесплатный вариант базы oracle?
Для учебных целей.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453743
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorSmя вот , если честно вообще не понимаю, что автор сего топика хочетЭто очень хорошо заметно.
Главное что ты поделился своими ощущениями.

Автор хочет для каждой строки из одной таблицы найти три строки из другой таблицы согласано определенной сортировке.

Это можно сделать
lateral/apply in 12c (lateral in 11g, event 22829 - как баловство).

multiset/collect.

сначала соединить, применить аналитику, отфильтровать.

А lateral появились с 9i под капотом с появлением ansi joins, только разработчику недоступны.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453745
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозг,

Любая база Оракла бесплатна для учебных целей.
Качай и ставь лучше EE чем кастрированную XE.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453767
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мегамозг,

можно через
Код: plsql
1.
lead(orderid,3,-1) over(PARTITION BY O.custid ORDER BY orderdate , orderid)


а потом выбрать все -1цы (т.е. это поле для нахождения 3 последних (упорядоченных по дате) значений)
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453875
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На 12c :

fetch first если нужно top-1

Код: plsql
1.
select d.*, (SELECT last_name FROM hr.employees e WHERE e.department_id=d.department_id order by hire_date desc fetch first 1 rows only) last_employee from hr.departments d



lateral + fetch first если нужно top-N

Код: plsql
1.
2.
3.
4.
select d.*, le.last_name, le.hire_date
from hr.departments d,
LATERAL 
(SELECT last_name, hire_date FROM hr.employees e WHERE e.department_id=d.department_id order by hire_date desc fetch first 3 rows only) le
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453883
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601fetch first если нужно top-1Глубина видимости в скалярах увеличина в 12с и получить топ 1 можно и другими способами.
...
Рейтинг: 0 / 0
Какой есть аналог CROSS APPLY?
    #39453889
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

да, но надо же попробовать сахар.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какой есть аналог CROSS APPLY?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]