Поиск разницы между двумя строками, сгруппированными по дате, или между двумя сводными столбцами

У меня есть набор значений для двух разных дат в моем отчете OBIEE:

------------------------------------------------------------------
Option   Date     Value 
------|---------|-------
OPT1    Date 1    5     
OPT1    Date 2    2     
OPT2    Date 1    9     
OPT2    Date 2    1     
OPT3    Date 1    7     
OPT3    Date 2    13    
OPT4    Date 1    5     
OPT4    Date 2    6   

Я надеюсь получить разницу значений между каждым набором дат и представить данные в следующем формате, сгруппированные по параметрам:

Option  Date               Diff
        Date 1   Date 2 
------|--------|--------|-------  
OPT1    5        2        3
OPT2    9        1        8
OPT3    7        13       -6
OPT4    5        6        -1

Часть даты может быть обработана с помощью Pivot, однако я не могу найти разницу между теперь повернутыми столбцами.

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

Option  Date      Value   Diff
-------|---------|-------|-------
OPT1    Date 1    5       null
OPT1    Date 2    2        3
OPT2    Date 1    9       null
OPT2    Date 2    1        8
OPT3    Date 1    7       null
OPT3    Date 2    13       -6
OPT4    Date 1    5       null 
OPT4    Date 2    6       -1

Любая помощь приветствуется.

Спасибо, Джунаид


person Junaid Ahmad    schedule 25.04.2019    source источник
comment
Пожалуйста, измените свой вопрос, чтобы включить запрос, который вы использовали для поворота данных.   -  person Boneist    schedule 25.04.2019
comment
Кроме того, как узнать, какие строки даты 1 связаны со строками даты 2? Есть столбец, чтобы связать их.   -  person Boneist    schedule 25.04.2019
comment
@ Джунаид Ахмад . . . Таблицы SQL представляют неупорядоченные наборы. Порядок отсутствует, если столбец не указывает порядок. А у вас вроде нет такой колонки.   -  person Gordon Linoff    schedule 25.04.2019
comment
Я отредактировал свой вопрос. Добавлен столбец для связи дат. Полезный?   -  person Junaid Ahmad    schedule 26.04.2019
comment
Просто добавлю свои 10 центов - OBIEE не так устроен и не работает. ОБИ использует модели. Вы не пишете SQL-запросы.   -  person Chris    schedule 27.04.2019


Ответы (2)


Вы можете обращаться к столбцам, сгенерированным предложением сводки, и выполнять вычисления с их использованием. Предполагая, что у вас есть некоторое ключевое значение, связывающее пары значений для дат 1 и 2, вы можете сделать что-то вроде:

-- CTE for sample data, with made-up keys
with your_table (some_key, some_date, value) as (
            select 1, date '2019-04-01', 5 from dual
  union all select 1, date '2019-04-15', 2 from dual
  union all select 2, date '2019-04-01', 9 from dual
  union all select 2, date '2019-04-15', 1 from dual
  union all select 3, date '2019-04-01', 7 from dual
  union all select 3, date '2019-04-15', 13 from dual
  union all select 4, date '2019-04-01', 5 from dual
  union all select 4, date '2019-04-15', 6 from dual
)
-- actual query
select some_key, date1, date2, date1 - date2 as diff
from your_table
pivot (max(value) for some_date in (date '2019-04-01' as date1, date '2019-04-15' as date2))
order by some_key;

  SOME_KEY      DATE1      DATE2       DIFF
---------- ---------- ---------- ----------
         1          5          2          3
         2          9          1          8
         3          7         13         -6
         4          5          6         -1

В выражении date1 - date2 as diff date1 и date2 — это имена/псевдонимы из опорной точки. Обычно вы не можете использовать псевдоним столбца на том же уровне запроса, который его определяет, но сводка позволяет вам избежать этого.

person Alex Poole    schedule 25.04.2019

Хорошо, я думаю, что нашел решение для выполнения построчного вычитания, разделенного по параметрам

ЗНАЧЕНИЕ - ЗАДЕРЖКА (ЗНАЧЕНИЕ, 1, NULL) БОЛЕЕ (РАЗДЕЛ ПО ОПЦИИ ЗАКАЗ ПО ОПЦИИ)

Однако из-за определенных ограничений я не могу использовать функции БД в OBIEE. Я хотел бы узнать о решении, которое не требует использования функций БД (например, LAG/LEAD).

person Junaid Ahmad    schedule 26.04.2019