Oracle SQL查询按日期范围获取销售额

时间:2016-06-03 16:00:27

标签: sql oracle

我希望编写一个SQL查询,它可以将销​​售额提供给日期范围,但它有点高于我的SQL知识。

我有一个客户的日期范围表,如下所示:

Cust Product startdate   enddate
-----------------------------------
 A   123    2011-01-01  2011-12-31
 A   124    2011-01-01  2011-05-01
 A   125    2011-01-01  2011-05-01
 B   123    2011-01-01  2011-03-01
 B   124    2011-01-01  2011-03-01
 C   125    2011-02-02  2011-05-01

和销售存储如下:

Cust Product    date      qty
-----------------------------------
 A   123    2011-04-08     1  
 A   124    2011-01-01     12 
 A   125    2011-05-01     2
 B   123    2011-01-04     3
 B   124    2011-02-01     5
 C   125    2011-03-01     80

结果应该类似于:

Cust Product startdate   enddate     qty
-----------------------------------------
 A   124    2011-01-01  2011-02-01    12
 B   123    2011-01-01  2011-02-01    3
 B   124    2011-02-02  2011-03-01    5
 A   123    2011-03-02  2011-05-01    1
 C   125    2011-03-02  2011-05-01    80
 A   125    2011-05-02  2011-12-31    2

感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我在MySQL中做了这个例子,因为Oracle服务器已关闭。但查询是一样的。

<强> SQL Fiddle Demo

SELECT R.*, S.*
FROM dRanges R
JOIN Sales S
  ON S.`date` >= R.`startdate`
 AND S.`date` <= R.`enddate` 
 AND S.`Cust` = R.`Cust`
 AND S.`Product` = R.`Product`

但你必须小心范围不重叠,否则你可以在两个范围内出现相同的销售价值

编辑请在此解释逻辑

enter image description here