当前位置: 首页 > 面试题库 >

在Oracle中计算条件累积总和

柯冯浩
2023-03-14
问题内容

我正在尝试做的事情的广泛视角是,在预订系统被预订之日,找出整个系统中尚未进行的预订。这意味着计算存在的所有记录的数量,这些记录的后缀redemption_date等于(或等于)booking_date,按分组booking_date。请参阅以下假设示例,以获得更好的解释:

redemption_date      booking_date
2013-01-01           2013-01-01
2013-01-06           2013-01-01
2013-01-06           2013-01-01
2013-01-07           2013-01-02
2013-01-08           2013-01-03
2013-01-09           2013-01-04
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-10           2013-01-05
2013-01-11           2013-01-05

我想要结果:

booking_date         number_of_reservations
2013-01-01           3
2013-01-02           3
2013-01-03           4
2013-01-04           5
2013-01-05           11

但是我对如何构造查询完全不满意。有小费吗?谢谢!

编辑:为明确起见,number_of_reservations应该是该日期的预订数量,以及该日期之后几天的预订数量。换句话说,number_of_reservations是截至booking_date(尚未发生)的数据库中的保留数。我的原始结果确实有误。对困惑感到抱歉


问题答案:

SELECT
booking_date,
COUNT(
CASE WHEN redemption_date >= booking_date
THEN 1 END
) AS number_of_reservations
FROM
Reservations
GROUP BY
booking_date


sqlfiddle

编辑:

基于更新的描述,我相信这应该能够获得预期的结果:

SELECT DISTINCT
    r."booking_date",
    (SELECT COUNT(*) 
     FROM reservations r2 
     WHERE 
         r2."booking_date" <= r."booking_date"
         AND r2."redemption_date" >= r."booking_date"
    ) AS number_of_reservations
FROM
    Reservations r
ORDER BY r."booking_date"

sqlfiddle



 类似资料:
  • 问题内容: 我有这个数据框 我需要做的是从C列开始累积值的总和,直到下一个值为零,然后重置累积总和,直到完成所有行。 预期产量: 我已经使用了该函数并达到了期望的输出,但是问题是您无法定义固定的窗口范围,因为DataFrame可以连续五次显示数字,有时只能是两次,依此类推。 我的问题与以下Pyspark非常相似:重置条件下的累积总和,但没有人回答。 要重现数据帧: 问题答案: 创建一个临时列(),

  • 问题内容: 我正在尝试为dellstore2数据库累计计算用户数。在这里和其他论坛上寻找答案时,我使用了这个 这返回 每个月是 看一下前几项,似乎总的来说还不错。但是当我跑步时 对于整个事情,我明白了 这与第一个输出11,681中的最后一项不一致。我猜上面的计算无法确定整个月的唯一性。什么是最快的计算方式(最好不使用自联接)? 问题答案: 除了直接从订单中选择之外,还可以使用如下子查询: 我认为这

  • 问题内容: 假设我有一个Java IntStream,是否可以将其转换为具有累积总和的IntStream?例如,以[4、2、6,…]开头的流应转换为[4、6、12,…]。 更笼统地说,应该如何实施有状态流操作?感觉这应该可行: 有一个明显的限制,即它仅适用于顺序流。但是,Stream.map明确需要无状态映射函数。我是否错过了Stream.statefulMap或Stream.cumulative

  • 我想知道如何计算的累计总和在AnyLogic中。具体地说,我有一个循环事件,每周改变一个参数的值。从这个参数我想计算它收到的值的累计总和,我怎么做呢? 该事件是循环模式的超时。操作是: "name_parameter"=圆形(max(正常(10,200),0));

  • 问题内容: 我有一个看起来像这样的表: 我想添加一个新的列,称为cumulative_sum,因此表如下所示: 是否有可以轻松完成此操作的MySQL更新语句?做到这一点的最佳方法是什么? 问题答案: 如果性能是一个问题,则可以使用MySQL变量: 或者,您可以删除该列并在每个查询中对其进行计算: 这以运行方式计算运行总和:)

  • 问题内容: 我正在和熊猫一起工作,但是我没有太多经验。我有以下DataFrame: 而且我需要计算前11行的累积总和。如果先前的数量少于11,则将剩余的数量假定为0。 我试过了: 但是,这并没有实现我想要的,但是这正在旋转累积总和的结果。我该如何实现? 问题答案: 呼叫与和和: