SQL, чтобы найти последовательные половинки - PullRequest
1 голос
/ 24 сентября 2019

Я ищу даты периода (начало и конец) для последовательных половинок.Как и сегодня (24/9/2019), мы ищем sql, которые могут дать следующие результаты и которые будут динамическими на текущую дату.

| Period        | Start Date | End Date  |
+---------------+------------+-----------+
| First Half    | 1-Jan-19   | 30-Jun-19 |
| Previous Half | 1-Jul-18   | 31-Dec-18 |

Может кто-нибудь предоставить здесь вводные данные?

Я пытался что-то ниже, но, кажется, нужно много утверждений if else

select (case when extract(month from sysdate) <= 6 then 1
             else 2
        end) as half_year
        from dual

1 Ответ

0 голосов
/ 24 сентября 2019

Вот как я это понял:

SQL> with test (curdate) as
  2    (select date '2019-09-24' from dual union all
  3     select date '2015-03-12' from dual
  4    ),
  5  inter as
  6    (select curdate,
  7            to_number(to_char(curdate, 'mm')) curdate_mon
  8     from test
  9    )
 10  select curdate,
 11    case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'), -12)
 12         else                       add_months(trunc(curdate, 'yyyy'), -6)
 13    end prev_start,
 14    case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'),  -6) - 1
 15         else                       trunc(curdate, 'yyyy') - 1
 16    end prev_end,
 17    --
 18    case when curdate_mon <= 6 then add_months(trunc(curdate, 'yyyy'), -6)
 19         else                       trunc(curdate, 'yyyy')
 20    end first_start,
 21    case when curdate_mon <= 6 then trunc(curdate, 'yyyy') - 1
 22         else                       add_months(trunc(curdate, 'yyyy'), 6) - 1
 23    end first_end
 24  from inter;

CURDATE    PREV_START PREV_END   FIRST_STAR FIRST_END
---------- ---------- ---------- ---------- ----------
24.09.2019 01.07.2018 31.12.2018 01.01.2019 30.06.2019
12.03.2015 01.01.2014 30.06.2014 01.07.2014 31.12.2014

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...