Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Какой есть аналог CROSS APPLY? / 18 сообщений из 18, страница 1 из 1
12.05.2017, 20:00
    #39452362
мегамозг
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
Периодически возникает задача найти 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
12.05.2017, 22:23
    #39452413
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
мегамозгЗЫ Пардон за вопрос новичка, уже неделю изучаю курс специалиста - там не видел ответа.

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

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

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

lateral можно и раньше, чем 12с, но через танцы с бубнами (set event 22829)...
...
Рейтинг: 0 / 0
16.05.2017, 07:58
    #39453557
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
Ну и в коллекцию, чтобы не было вопросов как реализовать 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
16.05.2017, 08:08
    #39453559
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
IgorSmкак реализовать TOP (MS SQL) в OracleЧудак, RTFM Changes in Oracle Database 12c Release 1 (12.1.0.1) (FAQ)
...
Рейтинг: 0 / 0
16.05.2017, 08:18
    #39453565
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
Elic,
я нищий чудак :) Нет у меня выше 11-й версии.
Спасибо за ликбез
...
Рейтинг: 0 / 0
16.05.2017, 08:20
    #39453566
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
Elic,
Да и смутила его тема
Насколько важны различия между современными версиями ORACLE и ORACLE 10g XE?
Может до сих пор с 10 кой мается
...
Рейтинг: 0 / 0
16.05.2017, 08:20
    #39453567
Какой есть аналог CROSS APPLY?
IgorSmкак реализовать TOP (MS SQL) в Oraclelateral/cross apply в предполагаемой версии есть, а fetch first еще не поддерживается?
...
Рейтинг: 0 / 0
16.05.2017, 08:25
    #39453569
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
row_number partition by,

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

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

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

multiset/collect.

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

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

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

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


а потом выбрать все -1цы (т.е. это поле для нахождения 3 последних (упорядоченных по дате) значений)
...
Рейтинг: 0 / 0
16.05.2017, 15:01
    #39453875
ora601
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
На 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
16.05.2017, 15:13
    #39453883
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
ora601fetch first если нужно top-1Глубина видимости в скалярах увеличина в 12с и получить топ 1 можно и другими способами.
...
Рейтинг: 0 / 0
16.05.2017, 15:19
    #39453889
ora601
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой есть аналог CROSS APPLY?
dbms_photoshop,

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


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