2015-11-25 5 views
0

У меня есть несколько запросов, которые я запускаю каждый день. Есть ли способ установить диапазон дат для нескольких выборок, а не вводить дату в каждом select.I использовать разработчик oracle sql для их запуска.Множественный диапазон дат запроса

здесь пример только три, но есть около десятка запросов:

select count(*)"Tall ord" 
from cr_ordpar 
inner join cr_palhis on cr_palhis.pikref = cr_ordpar.pikref 
inner join CR_LODHED_DESP on cr_lodhed_desp.ilodno = cr_ordpar.ILODNO 
where cr_palhis.hstdat between '24-nov-15 07:00' and '25-nov-15 07:00:00' 
and hststs_str = 'Pallet Output From Racking' 
and cr_palhis.palhgt = '2700' 
order by cr_lodhed_desp.lodref; 

select count(*)"Tall del" 
from cr_palhis 
where cr_palhis.hstdat between '24-nov-15 07:00' and '25-nov-15 07:00:00' 
and hststs_str = 'Pallet Deleted' 
and cr_palhis.palhgt = 2700 
and cr_palhis.rakblk <> 510; 

select count(*)"Tall ind" 
from cr_palhis 
where cr_palhis.hstdat between '24-nov-15 07:00' and '25-nov-15 07:00:00' 
and hststs_str = 'Pallet Indexed' 
and cr_palhis.PALHGT = '2700'; 
+0

'' 24 -nov-15 07: 00'' не является ** DATE **, это ** строка **. Что такое ** тип данных ** 'cr_palhis.hstdat'? –

+0

Вопрос: как будет обрабатываться конечный результат. Это justa report или нам нужно передать это другому инструменту Front end? –

ответ

0

Есть несколько вопросов с вашей датой.

  • Во-первых, '24-nov-15 07:00' не ДАТА, это строка. Вы должны всегда использовать TO_DATE, чтобы явно преобразовать литерал в DATE. Кроме того, помните TO_DATE зависит от NLS, если вы не указали NLS_DATE_LANGUAGE. NOV не то же самое на других языках. Формат

  • YY уже давно recongnised в Y2K ошибки, и мир уже видел усилия, чтобы избавиться от него. Либо укажите полный YYYY, либо используйте формат RR, но поймите его перед реализацией.

TO_DATE('24-nov-2015 07:00','dd-mon-yyyy hh24:mi','nls_date_language=ENGLISH')

Вы можете использовать GROUP BY пункта, чтобы получить разницу в количестве в одном запросе. Учитывая, что все условия остаются такими же.

SELECT hststs_str, 
    COUNT(*) cnt 
FROM cr_ordpar 
INNER JOIN cr_palhis 
ON cr_palhis.pikref = cr_ordpar.pikref 
INNER JOIN CR_LODHED_DESP 
ON cr_lodhed_desp.ilodno = cr_ordpar.ILODNO 
WHERE cr_palhis.hstdat 
BETWEEN TO_DATE('24-nov-2015 07:00','dd-mon-yyyy hh24:mi','nls_date_language=ENGLISH') 
AND  TO_DATE('25-nov-2015 07:00','dd-mon-yyyy hh24:mi','nls_date_language=ENGLISH') 
AND hststs_str  IN('Pallet Output From Racking', 
         'Pallet Deleted', 
         'Pallet Indexed' 
         ) 
AND cr_palhis.palhgt = '2700' 
AND cr_palhis.rakblk <> 510 
GROUP BY hststs_str 
ORDER BY cnt;