Oracle Query 按另一个表中的每个日期范围对一列求和

Posted

技术标签:

【中文标题】Oracle Query 按另一个表中的每个日期范围对一列求和【英文标题】:Oracle Query to sum a column by every date range in another table 【发布时间】:2013-12-05 19:44:26 【问题描述】:

我需要在我的项目中编写一个查询,我想要在另一个表的每个日期范围(对于 ORACLE 数据库)的每个日期范围内计算一列的总和。

TABLE1 – 每个日期都有预订的人数:

DT          NO_OF_PAX
--------    ---------------
01-JAN-14    10
02-JAN-14    5
03-JAN-14    8
05-JAN-14    5
:
:
28-DEC-14    20
30-DEC-14    9
31-DEC-14    15

TABLE2 - 它有很多日期范围:

ST_DT        END_DT
---------   ------------
01-JAN-14    31-JAN-14
01-FEB-14    28-FEB-14
12-JAN-14    15-FEB-14
:
:
01-NOV-14    20-NOV-14
01-DEC-14    31-DEC-14

现在我需要编写查询,它应该为 TABLE2 的每个日期范围显示来自 TABLE1 的 SUM(NO_OF_PAX)。请教我应该怎么写。

由于两者都没有共同的列,我不知道如何加入这两个表。我写成 SELECT SUM(TABLE1.NO_OF_PAX) FROM TABLE1, TABLE2 WHERE TABLE1.DT BETWEEN TABLE2.ST_DT AND TABLE2.END_DT

它失败了,没有单组功能。

【问题讨论】:

你试过什么? 【参考方案1】:

这是正确的 SQL:

SELECT T2.ST_DT, T2.END_DT, 
(
    SELECT SUM(T1.NO_OF_PAX)
    FROM TABLE1 T1
    WHERE T1.DT BETWEEN T2.ST_DT AND T2.END_DT
) NO_OF_PAX
FROM TABLE2 T2
ORDER BY T2.ST_DT ASC

参见 SQLFiddle http://sqlfiddle.com/#!4/2e9e9/1/0

【讨论】:

【参考方案2】:

试试这个方法

SELECT st_dt, end_dt, COALESCE(SUM(no_of_pax), 0) total
  FROM Table2 t2 LEFT JOIN Table1 t1
    ON t1.dt BETWEEN t2.st_dt AND end_dt
 GROUP BY st_dt, end_dt

样本输出:

| ST_DT | END_DT |总计 | |-----------|------------|--------| | 2014 年 1 月 1 日 | 14 年 1 月 31 日 | 28 | | 2014 年 1 月 12 日 | 14 年 2 月 15 日 | 0 | | 2014 年 1 月 1 日 | 14 年 2 月 28 日 | 0 | | 14 年 11 月 1 日 | 14 年 11 月 20 日 | 0 | | 14 年 12 月 1 日 | 14 年 12 月 31 日 | 44 |

这里是SQLFiddle演示

【讨论】:

【参考方案3】:

运行这个并告诉我你的结果(测试)

SELECT A.ST_DT, A.END_DT, SUM(A.NO_OF_PAX) FROM
(
    SELECT t2.*, t1.NO_OF_PAX
    FROM Table1 t1,
         Table2 t2
    WHERE t1.DT BETWEEN t2.ST_DT AND t2.END_DT
) A
GROUP BY A.ST_DT, A.END_DT

【讨论】:

这会失败,你忘记了“select from”并且你正在分组,但他想知道每一行的日期范围。 @Andrew Paes:我使用您的 SQLFiddle 进行了测试。有效。返回与您相同的结果。 @Loc 道歉我忘了指定 TABLE2 可以有重复的日期范围。我仍然希望它们显示为带有人数总和的重复数据。所以这失败了,因为 GROUP BY func。

以上是关于Oracle Query 按另一个表中的每个日期范围对一列求和的主要内容,如果未能解决你的问题,请参考以下文章

按一个变量排序,按另一个分组,然后在 R 中的 SQL Query 中选择第一行

XSLT 2.0 按另一个样式表中的变量排序

Oracle Join 表与第一个表中的日期范围和第二个表中的日期

如何将EXCEL表按另一个EXCEL表中的内容进行搜索,然后将结果复制到新的工作表中?

WordPress WP_Query:根据自定义元值显示自定义帖子类型,并按另一个自定义元值排序

更新 Oracle SQL 表中的日期