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支付支持支持获取账户信息和余额创建商店,商店查询创建二维码二维码查询创建订单订单查询订单退款等功能

一次动态sql查询订单数据的设计

订单列表查询SQL,查询出订单的数量和订单详细信息(包括订单中的所有商品)。

金蝶K/3 WISE 12.3订单跟踪SQL报表

Oracle SQL 顺序连接数据

SQL怎么查询订单?好的话给分多!!!