2014-09-12 2 views
-1

Надеясь кто-то может помочь здесь, у меня есть следующие данныеSQL - Как возвращает значения вне запроса диапазона дат

Field 1 Field 2 Date  Data 
1  1  12/09/14 1 
2  2  12/09/14 1 
3  1  11/09/14 1 
4  3  11/09/14 1 

Мне нужно написать запрос SQL, который суммирует все «данные» на основе даты диапазон, а затем все, что соответствует в поле 2. Поэтому, если строка выходит за пределы диапазона дат, но значение в поле 2 соответствует другой строке, которая находится в диапазоне дат, она должна быть включена

Например, если я был чтобы запросить все за 12/09/14, я хочу видеть сумму строк 1, 2 и 3 .... поскольку строка 3 находится за пределами диапазона дат, но она соответствует строке 1 в столбце «Поле 2». Строка 4 не должна включаться, поскольку она находится за пределами диапазона и не имеет соответствующего значения в поле «0»

Любые идеи?

Я играл вокруг с вариациями запросов, но он либо выбирает только значения диапазона дат или все :(

EDIT:

Ok Я дал Раджеш ответить попробовать и это Безразлично» т, кажется, включают в себя данные за пределами диапазона дат. Я ожидал, что окончательная сумма в этом примере равной 3, но это только показывает 2

select sum(a) from (
select sum(batch_m2_nett) as a 
from batch_inf 
where batch_date = to_date('30/09/15','DD/MM/RR') 
union 
select sum(f2.batch_m2_nett) as a 
from batch_inf f1 
inner join batch_inf f2 
on f1.batch_date = to_date('30/09/15','DD/MM/RR') 
and f1.batch_opt_start_batch = f2.batch_opt_start_batch 
and f2.batch_date != to_date('30/09/15','DD/MM/RR') 
); 

SUM(A) 
------ 
2 

SQL> select batch_no, batch_opt_start_batch, batch_date, batch_m2_nett from batch_inf where batch_no in (8811,8812,8814); 
BATCH_NO BATCH_OPT_START_BATCH BATCH_DATE  BATCH_M2_NETT 
-------- --------------------- --------------- ------------- 
    8811     8814 30-SEP-15     1 
    8812     8814 30-SEP-15     1 
    8814     8814 01-OCT-15     1 
+0

Пожалуйста, ваши попытки – Barranka

+0

Извините должны были удалены, что линия ... мои «потуги», где просто базовая "if date = blah". Я предполагаю, что мне нужно передать значения в подзапрос, но я не уверен, как и как наилучшим образом –

ответ

0

первый оператор получает сумму значений данных, где дата соответствует

второе утверждение получает сумму значений данных, где field2 совпавших дата строки совпадающих с другими рядами, используя автообъединение

select SUM(s) 
from 
(
select SUM(data) as s 
from fields 
where date ='12/09/14' 
union 
select sum(f2.data) as s 
from fields f1 
inner join fields f2 
on f1.date ='12/09/14' 
and f1.field2 = f2.field2 
and f2.date != '12/09/14' 
) T 
+0

Спасибо за указатели ... Я не смог получить свой ответ, чтобы форматировать соответствие в ответе, поэтому я добавил его к первому вопросу –