gpt4 book ai didi

mysql - Sequel Pro 触发器,更新第二个表中的计算字段

转载 作者:行者123 更新时间:2023-11-29 18:34:15 27 4
gpt4 key购买 nike

好的,我正在 Sequel Pro(适用于 Mac 的 MySQL 应用程序)中构建一个财务数据库。我有一个记录价格/库存水平的表,我将有一个第二个表来维护计算值,例如增量(每日变化)和最终移动平均线等。我认为最好计算一次这些东西更新/插入值时而不是提取数据时。

我必须使用具有 row_number() 等效项的临时表来处理计算工作日,而不仅仅是常规日期或非连续日期/ID

本质上,问题在于(更新后)触发器似乎没有执行任何操作,尽管它似乎也没有标记任何失败。我只是通过更改一些现有值来测试它,计算字段保持不变。我猜这是一个语法问题? SequelPro/MySQL 对我来说有点奇怪,因为我通常在日常工作中使用 SQL Server...

BEGIN

CREATE TEMPORARY TABLE IF NOT EXISTS predata AS
(SELECT thedate
,price_cash
,price_3m
,stocks
FROM aluminium
WHERE thedate BETWEEN DATE_ADD(NEW.thedate,INTERVAL -6 DAY)
AND DATE_ADD(NEW.thedate,INTERVAL 5 DAY));

CREATE TEMPORARY TABLE IF NOT EXISTS temp1 AS
(SELECT t.*, @rownum := @rownum + 1 AS rank
FROM predata t,
(SELECT @rownum := 0) r
ORDER BY thedate ASC);

CREATE TEMPORARY TABLE IF NOT EXISTS temp2 AS(SELECT * FROM temp1);

CREATE TEMPORARY TABLE IF NOT EXISTS result_delta AS
(
SELECT b.thedate
,(b.price_cash - a.price_cash) AS delta_cash
,(b.price_3m - a.price_3m) AS delta_3m
,(b.stocks - a.stocks) AS delta_stocks
FROM temp1 a
INNER JOIN temp2 b ON b.rank-1 = a.rank
WHERE b.thedate = NEW.thedate
OR a.thedate = NEW.thedate
);

UPDATE aluminium_calcs a
INNER JOIN result_delta r ON a.thedate = r.thedate
SET a.delta_cash = r.delta_cash
, a.delta_3m = r.delta_3m
, a.delta_stocks = r.delta_stocks;

END

最佳答案

最后我决定在 php 中构建一组额外代码并将 Include('deltas_update.php') 添加到我的更新屏幕。无论如何,这可能是一个更好的解决方案,因为使用正确的数组/循环和 pho 代码比 SQL 更容易进行计算。 MySQL 非常简单,但最好将繁重的工作转移到其他更容易可见/可追踪的地方

关于mysql - Sequel Pro 触发器,更新第二个表中的计算字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439521/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com