Динамический диапазон дат в SQL на основе времени выполнения запроса

#sql #oracle

#sql #Oracle

Вопрос:

У меня такое чувство, что мне нужно будет сделать это на Python, но я подумал, что сначала проверю здесь

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

У меня есть эти отчеты, которые автоматически генерируются из Splunk первого числа месяца, и я хотел узнать, есть ли способ запускать отчеты за весь предыдущий месяц без необходимости устанавливать sysdate-30

Ниже приведен мой запрос

 select 
su.first_name, su.last_name, po.orig_nbr, po.dest_nbr, po.time_date_stamp
from popd_account_activity po
join subscriber su on po.subscriber_id=su.subscriber_id
where time_date_stamp > to_date('02-01-2019 00:00:00', 'mm-dd-yyyy HH24:MI:SS')
and time_date_stamp < to_date('02-28-2019 00:00:00', 'mm-dd-yyyy HH24:MI:SS')
and su.corp_acct_nbr=2004346
order by time_date_stamp asc;
  

и когда я запущу его в следующем месяце первого числа недели, я хочу, чтобы он в основном выполнялся

 select 
su.first_name, su.last_name, po.orig_nbr, po.dest_nbr, po.time_date_stamp
from popd_account_activity po
join subscriber su on po.subscriber_id=su.subscriber_id
where time_date_stamp > to_date('03-01-2019 00:00:00', 'mm-dd-yyyy HH24:MI:SS')
and time_date_stamp < to_date('03-29-2019 00:00:00', 'mm-dd-yyyy HH24:MI:SS')
and su.corp_acct_nbr=2004346
order by time_date_stamp asc;
  

Мне не нужно заходить и обновлять диапазон дат вручную.

Комментарии:

1. Пометьте вопрос используемой базой данных.

Ответ №1:

вы можете использовать trunc и добавить месяц, это всегда даст вам весь предыдущий месяц

 select 
su.first_name, su.last_name, po.orig_nbr, po.dest_nbr, po.time_date_stamp
from popd_account_activity po
join subscriber su on po.subscriber_id=su.subscriber_id
where time_date_stamp > add_months( trunc(sysdate,'MM'), -1 )
and time_date_stamp < trunc(sysdate,'MM')
and su.corp_acct_nbr=2004346
order by time_date_stamp asc;
  

По крайней мере, в Oracle, не уверен, какую базу данных вы используете.

Комментарии:

1. Приношу свои извинения, все еще новичок в stackoverflow и изучаю, какую информацию необходимо предоставить. Я использую Oracle и благодарю вас, я буду использовать то, что вы предоставили, и протестирую

Ответ №2:

Использование add_months( trunc(sysdate,’MM’), -1 ) и trunc(sysdate, ‘MM’) решило мои проблемы.

Спасибо, Веблауд