希望有人可以在这里提供帮助,我有以下数据
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" Field 2"柱。不应包括第4行,因为它在范围之外且在#34中没有匹配值;字段2"
有什么想法吗?
我一直在玩各种查询,但它只选择日期范围值或所有内容:(
编辑:
好的,我已经给Rajesh一个回答,它似乎不包括日期范围之外的数据。我期待这个例子中的最终总和等于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 :(得分: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