Несколько оконных определений в конце запроса - PullRequest
0 голосов
/ 05 мая 2019

В Oracle другой способ написания оконной функции выглядит примерно так:

Select  a
           first_value(b) over w,
           first_value(c) over w
 from table 
window w as (partition by d order by e)

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

Select  a
           first_value(b) over w,
           first_value(c) over w,
           first_value(h) over t,
           first_value(i) over t
from table 
window w as (partition by d order by e)
window t as (partition by f order by g)

Я думаю, что код становится проще для понимания, вместо того, чтобы писать определение раздела в каждом столбце для определения второго окна (t).

Привет

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Уверен, что это синтаксис MySQL 8, который вы смешиваете.Я думаю, что вы видели эту справочную страницу , которая касается базы данных MySQL 8, а не базы данных Oracle, поскольку база данных MySQL также принадлежит корпорации Oracle.

Query

SELECT 
 COUNT(a."profit") OVER w
FROM 
 a 
WINDOW w as (PARTITION BY a."year")

Willприведите к ошибке ORA-00923: FROM keyword not found where expected в базе данных Oracle, см. demo

Где

SELECT 
 COUNT(a.profit) OVER w
FROM 
 a 
WINDOW w as (PARTITION BY a.year)

будет отлично работать на MySQL 8.0, см. demo

0 голосов
/ 06 мая 2019

Хотя ANSI SQL 2003 официально представил оконные функции для языка SQL в качестве стандарта и поддерживает предложение WINDOW, только несколько СУБД фактически интегрировали это предложение в свои диалекты, включая Postgres, Sybase Anywhere. , SQLite, а теперь и недавно MySQL. Другие профили, Oracle, DB2 и SQL Server, похоже, не поддерживают предложение WINDOW.

В результате вам нужно переписать окно для каждого агрегатного использования в Oracle.

...