【问题标题】:SQL query get row from table A when it's column value is not in table B and calculate something that will be stored in table B当列值不在表 B 中时,SQL 查询从表 A 中获取行并计算将存储在表 B 中的内容
【发布时间】:2015-02-28 19:36:55
【问题描述】:

一个叫

trades

另一个叫

yields

交易有以下列

common_id (which marks the trades that belong together)
type (buy or sell)
amount

yields 有以下列

common_id (which is the one from trades but will only appear once now)
yield

收益率字段的计算方式如下:如果交易是“买入”,则减去其价值,如果交易是“卖出”,则添加价值。

所以基本上几个交易属于一起,由 common_id 字段显示。我想从这些交易中计算收益率。
然后对属于一起的下一个交易执行相同的操作,依此类推。

现在问题来了。 “交易”表最初是建立起来的,可以变得非常大,之后我想建立第二个表“收益”。对于初始构建,这很容易。问题是当应用程序中断并且我已经拥有两个表时如何执行此操作。

所以我需要“交易”的记录以及尚未在“收益”中的 common_ids,然后我计算收益并将其存储在“收益”中。

有人有什么想法吗?

问候

【问题讨论】:

  • Mysql 还是 SQL-Server?这是两种不同的想法。
  • 对不起mysql,修复了
  • So I need the recods of "trades" with the common_ids that are not already in "yields", after that I calculate the yield and store it in "yields". 如果您有一笔特定交易的价值未记录在yields 中怎么办?也就是说,trades.common_id 存在于yields 中,但不是所有单个交易的值?

标签: mysql sql mariadb


【解决方案1】:

您可以在单个 insert 语句中处理此问题:

INSERT INTO yields
(SELECT   common_id, SUM (CASE type WHEN 'buy' THEN -1 * amount
                                    WHEN 'sell' THEN amount
                                    ELSE 0 -- just a precaution
                          END)
 FROM     trades
 WHERE    common_id NOT IN (SELECT common_id FROM yields)
 GROUP BY common_id)

【讨论】:

  • 但是这个查询只添加一个交易量的符号,但我有例如 3 笔具有相同 common_id "buy" "buy" "sell" 的交易,所以它应该执行以下操作:-buy1 .amount -buy2.amount + sell1.amount。这也可以在查询中完成,还是我需要在外部程序中完成?
【解决方案2】:

我会删除表产量并重新建立它。我认为这是最简单的方法,而且运行速度也会比跑遍所有线路更快

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 2013-05-26
    相关资源
    最近更新 更多