У нас есть приложение, которое в основном берет конец финансового года компании и идет назад, чтобы найти способы использования 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 больше не будет работать .......
В надежде вернуть значения независимо от значения для конца финансового года ......