SQL查询以跟踪新订单或旧订单中的余额变化,没有日期
Posted
技术标签:
【中文标题】SQL查询以跟踪新订单或旧订单中的余额变化,没有日期【英文标题】:SQL query to keep track of new orders or balance changes in old orders without dates 【发布时间】:2021-07-22 01:54:44 【问题描述】:我有一个记录类似于以下的表
order_id | order_balance |
---|---|
34 | 400 |
35 | 200 |
36 | 100 |
一旦插入 order_id,即 order_id = 34。当 order_balance 更改时,不会插入新记录(不是追加),余额本身会在同一记录中更新。所以说order_id=34 的余额明天变为300。当你明天看表时。
order_id = 34 的记录如下所示:
order_id | order_balance |
---|---|
34 | 300 |
所以我想建立一个表来跟踪新插入的 order_ids 和 order_balances,或者在最后一天(或时间段,可能是小时、天、分钟等)发生余额变化.我正在使用 pyspark 和 spark sql。
我的第一个想法是创建一个表格来记录昨天的余额,然后将它们与今天的余额进行比较。但是,这将是 spark 作业的两次单独运行,并且需要我在 spark 中的作业运行之间保留该表。这甚至可能吗?
【问题讨论】:
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 SQL Server SQLite - 请更正您的标签。 还要注意表格格式代码。 顺便说一句-您熟悉“接受”答案吗?我注意到你还没有接受任何东西。 您好,感谢您的 cmets,我已经更正了我的标签,并添加了我对如何继续进行的初步思考过程。我还没有接受答案,因为我的问题略有改变,我还没有找到答案。 【参考方案1】:您是否尝试过在插入/更新后触发?然后它会根据你想要的规则插入或更新新的“control_table”。
或者,如果我理解正确,你可以有这样的视图:
CREATE VIEW v_changed_orders_last_day AS
SELECT
order_id,
order_balance,
order_updated_date
FROM orders
WHERE order_updated_date IS NULL
OR order_updated_date >= sysdate()-1;
【讨论】:
如果我没有订单日期怎么办,我只有order_id和表中的余额。当余额发生变化时,旧余额会在同一记录中被覆盖。在这种情况下,我将如何跟踪 order_ids 的余额变化? 您必须创建一个新表进行控制并使用触发器。下面是 ORACLE 的示例。语法可能因数据库而异: CREATE TRIGGER my_trigger AFTER INSERT OR UPDATE ON original_table FOR EACH ROW BEGIN -- 将记录插入控制表 INSERT INTO control_table (order_id, old_order_balance, new_order_balance, date) VALUES (:new.order_id, :old .order_balance, -- 订单余额的旧值 :new.order_balance, -- 订单余额的新值 sysdate() -- 时间戳);结束;【参考方案2】:您想跟踪更改...将表格转换为System-Versioned Temporal Table.
现在 SQL Server 将通过为该表创建一个日志表来跟踪对该表所做的每一次更改。
【讨论】:
【参考方案3】:您必须创建一个新表进行控制并使用 TRIGGER。下面是 ORACLE 的示例。语法可能因数据库而异:
CREATE OR REPLACE TRIGGER my_trigger
AFTER INSERT OR UPDATE
ON original_table
FOR EACH ROW
BEGIN
-- Insert record into control table
INSERT INTO control_table
( order_id,
old_order_balance,
new_order_balance,
date )
VALUES
( :new.order_id,
:old.order_balance, --gets the old value for order balance
:new.order_balance, --gets the new value for order balance
sysdate() --gets the timestamp when it occurred
);
END;
【讨论】:
以上是关于SQL查询以跟踪新订单或旧订单中的余额变化,没有日期的主要内容,如果未能解决你的问题,请参考以下文章
Delphi Mercadopago支付支持支持获取账户信息和余额创建商店,商店查询创建二维码二维码查询创建订单订单查询订单退款等功能