У меня есть таблица с такими столбцами, как Cycle_code (2 символа), cycle_month (2 символа), cycle_year (4 символа). Как я могу выбрать последние данные 06 cycle_month? - PullRequest
0 голосов
/ 23 апреля 2020

Инициализирующий столбец, в котором применяется условие «где», похож на «Cycle_code» и «Cycle_month» и> «Cycle_year». Я хочу запрос, который может выбрать последние 6 данных cycle_month из текущего цикла month.but> предположим, что текущий месяц цикла равен 04, а затем найти данные за 6 месяцев, которые мне нужны для поиска за 2 месяца прошлого года?>. теперь в моем столбце cycle_year значение "where clause" должно быть изменено по отношению к cycle_month. Я попробовал это.

where cycle_code="XX" and
cycle_month in (04,03,02,01,11,12) and
cycle_year ="2020";```

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Вы можете восстановить действительную дату из этих частей с помощью to_date() и использовать ее для фильтрации:

where to_date(cycle_year || '-' || cycle_month || '-01', 'yyyy-mm-dd') 
    >=  trunc(sysdate, 'mon') - interval '6' month

Я бы не рекомендовал хранить ваши даты как отдельные части, так как это делает вещи излишне сложными когда вам нужно рассматривать их как даты. Вы можете использовать вычисляемый столбец для упрощения запросов:

alter table mytable add 
    mydate as (to_date(cycle_year || '-' || cycle_month || '-01', 'yyyy-mm-dd'))

Тогда вы можете просто сделать:

where mydate >= trunc(sysdate, 'mon') - interval '6' month
0 голосов
/ 23 апреля 2020

Если я правильно понимаю, вы можете использовать арифметику c для комбинаций год / месяц:

where cycle_year * 12 + cycle_month >= extract(year from sysdate) * 12 + extract(month from sysdate) - 5
...