繁体   English   中英

更改数据捕获 Redshift

[英]Change Data Capture Redshift

我有一张桌子

第一天

ID 数量 日期
1 10 2020 年 12 月 2 日
2 15 2020 年 12 月 2 日
3 20 2020 年 12 月 2 日
4 25 2020 年 12 月 2 日

我在第一天做了一笔金额,结果是 70

现在第二天我还有几行更新了追加的金额

新表看起来像这样

第 2 天

ID 数量 日期
1 10 2020 年 12 月 2 日
2 20 13-02-2020
3 20 2020 年 12 月 2 日
4 25 2020 年 12 月 2 日
5 30 13-02-2020
6 35 14-02-2020

现在,如果您看到 ID 2 有新的更新量,即 20 早于 15 并且它在 ID 5 和 6 上具有日期 13 和 14 的新数据

我可以只运行一个查询,它只会处理更改的数据并将其添加到以前的总和中,例如 30+35+5(因为从最后一个值只增加了 5)

 total = 70

主要是处理变化的数据

这在很大程度上取决于如何提供历史数据。

此示例需要在历史数据表中添加额外的Day列,并且您使用的是支持LAG()的 MySQL 版本(例如 MySQL v8+ 或 MariaDB 10.3+)。 假设历史数据表可能是这样的:

ID 数量 日期
1 10 2020-02-12 1
2 15 2020-02-12 1
3 20 2020-02-12 1
4 25 2020-02-12 1
1 10 2020-02-12 2
2 20 2020-02-13 2
3 20 2020-02-12 2
4 25 2020-02-12 2
5 30 2020-02-13 2
6 35 2020-02-14 2

..然后可能是这样的查询:

SELECT Day, 
       SUM(amount) AS Total,
       SUM(amount)-LAG(SUM(amount)) OVER (ORDER BY Day) AS diff
FROM historical_data 
GROUP BY Day
ORDER BY Day;

或(在 MariaDB 中):

SELECT Day, Total,
       Total-LAG(Total) OVER (ORDER BY Day) AS Diff
 FROM
(SELECT Day, 
       SUM(amount) AS Total
FROM historical_data 
GROUP BY Day) A;

这将返回如下结果:

全部的 差异
1 70
2 140 70

我正在关注该站点上的一个示例,该示例介绍了如何使用LAG()获取其上方的行数据值,并使用它们减去当天的SUM(amount)值。

这是实验的演示小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM