SQL - 如何在日期范围查询之外返回值

时间:2014-09-12 03:18:33

标签: 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" 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

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