2015-10-29 5 views
0

Я работаю над следующим запросом и не могу определить его окончательный вариант. Мне нужен мой запрос, чтобы дать мне результат между предыдущим бизнесом и предыдущим рабочим днем ​​минус (-) 28 дней. (например, диапазон дат между 10/28/2015 и 10/28/2015 -28). Запрос, который я написал до сих пор, дает мне только 28-й день (09/30/2015) и НЕ диапазон между предыдущим бизнесом день и предыдущий рабочий день -28. Мои исследования показывают несколько разных способов сделать это, и до сих пор никто не работал для меня.Сложный диапазон дат

SELECT SMBL, SUM(NET_FLOWS/1000000.00) 
FROM HISTORY 
WHERE DATE - 28 = DATE AND DATE = TO_DATE('10282015','MMDDYYYY') 
AND SYMBOL IN ('AAA','BBB') 
GROUP BY SMBL 
+0

Как насчет 'WHERE DATE между TO_DATE ('10282015', 'MMDDYYYY') - 28 и TO_DATE ('10282015', 'MMDDYYYY')'? МЕЖДУ включительно. –

+1

Как DATE-28 = DATE когда-либо разрешить TRUE? –

+0

@MarmiteBomber да это сработало. Спасибо за вашу помощь – ace123

ответ

0

Во-первых, диапазоны дат легко с помощью BETWEEN, так что вы делаете быстрое решение:

WHERE DATE BETWEEN (SYSDATE-28) and (SYSDATE-1) 

Тогда вы понимаете, ваши даты имеют компоненты времени, так, чтобы включить все вчера и все день -28 вам нужно:

WHERE DATE >= TRUNC(SYSDATE)-28 
AND DATE < TRUNC(SYSDATE) 

Затем я смотрю на свое правило «предыдущий рабочий день» и спросить - каковы ваши рабочие дни? В понедельник, чтобы подняться до прошлой пятницы? Или в субботу? Или вы работаете в течение 7 дней в неделю? Как насчет официальных праздников? И еще 28 дней КАЛЕНДАРЬ? Или 28 ДЕЛОВЫХ дней?

Ahh правил бизнеса. Дьявол всегда находится в этих деталях ....

+0

, чтобы ответить на несколько вопросов. Мы являемся фирмой Mon-Fri (5 рабочих дней). Поэтому, если он состоится в понедельник, мы вернемся к пятничной деловой дате данных. Причина, по которой я использую 28 дней, состоит в том, что мы используем 4-х недельный диапазон дат для наших вычислений, поэтому именно здесь и происходит 28 дней. Ваш запрос sysdate-28 отключен, потому что отправной точкой является предыдущая дата работы, а не текущая. Однако с простым добавлением дня, например. sysdate - 29, запрос работал нормально. Благодарю. – ace123

+0

Да, бизнес -1 то - 28. Я пропустил дополнительный день. Как я уже сказал ... это всегда маленькие детали, которые вас трогают :-) –

Смежные вопросы