[英]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.