在Oracle数据库中,可以使用MODEL子句实现数据的动态聚合
WITH sales_data AS (
SELECT
product_id,
order_date,
amount_sold
FROM
sales
)
SELECT
product_id,
order_date,
SUM(amount_sold) OVER (PARTITION BY product_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as running_total
FROM
sales_data
ORDER BY
product_id,
order_date;
在这个示例中,我们首先创建了一个名为sales_data
的临时表,包含product_id
、order_date
和amount_sold
字段。然后,我们使用SUM()
函数和OVER()
子句计算每个产品在给定日期之前(包括当天)的累计销售额。PARTITION BY
子句将数据按产品ID分组,而ORDER BY
子句则按订单日期对每个分组进行排序。ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
表示窗口范围从当前行的第一行开始,直到当前行。
最后,我们按product_id
和order_date
对结果进行排序。这样,我们就可以看到每个产品在不同日期的累计销售额。