"СВЯЗЬ ПО УРОВНЮ" - PullRequest
       23

"СВЯЗЬ ПО УРОВНЮ"

0 голосов
/ 15 июня 2019

У нас есть приложение, которое в основном берет конец финансового года компании и идет назад, чтобы найти способы использования CONNECT BY LEVEL, и ищет другие данные.

Однако мы обнаружили, что некоторые компании меняют свой финансовый цикл, заставляя CONNECT BY LEVEL работать неправильно. Смотрите код, надеюсь, кто-то может дать какую-то креативную идею?

Сначала посмотрите, как компания называет декабрь своей датой окончания финансового года, но затем в 2018 году изменился на ноябрь:

11/30/2020
11/30/2019
11/30/2018
12/31/2017
12/31/2016
12/31/2015

Разработанный запрос выглядит так:

  SELECT TO_CHAR(a.fy,'MM/DD/YYYY') AS fy, DECODE(b.net_sales,NULL,'NA',b.net_sales) AS net_sales
  FROM (SELECT ADD_MONTHS(LAST_DAY(TO_DATE(TO_CHAR(period_date), 'YYYYMM')), (LEVEL - 1) * -12) AS fy
        FROM (SELECT m_ticker, period_type, MAX(period_date) AS period_date
              FROM period_data
              WHERE ticker = 'LUK'
                AND period_type = 'A'
                AND adjusted_revenue IS NOT NULL
              GROUP BY ticker, period_type)
        CONNECT BY LEVEL <= 5
        ORDER BY 1 ASC) a,
       (SELECT LAST_DAY(TO_DATE(TO_CHAR(period_date),'YYYYMM')) AS fy, TO_CHAR(NVL(adjusted_revenue,0)) AS net_sales
        FROM period_data
        WHERE ticker = 'LUK'
          AND period_type = 'A'
        ORDER BY period_date DESC NULLS LAST) b
  WHERE a.fy = b.fy(+) ORDER BY 1 DESC;

Таким образом, я получаю этот вывод:

11/30/2018  5009.73
11/30/2017  NA
11/30/2016  NA
11/30/2015  NA
11/30/2014  NA

Поскольку 2018 год - 11/2018, а начиная с 2017 года - 12/2017. Месяц изменился, поэтому вычитание 12 больше не будет работать .......

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

...