在mysql中计算复杂的累积值

dldeef67  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(301)

相关表格和尝试的解决方案列在这篇文章的底部。目标和问题描述如下。
目标
此查询的目标是构建下面的对象(返回行)的php数组。这是用户筛选的每个货币对的每个事务的时间戳历史记录。我什么都能做到,除了 cumulative_quantity 价值观

'BTC-USD' => array(
  array(
    'timestamp' => (int),
    'price' => (float),
    'price_usd' => (float),
    'buy_sell' => (bool),
    'quantity' => (float),
    'total_value' => (float),
    'total_value_usd' => (float),
    'cumulative_quantity' => (float),
    'cumulative_quantity_base' => (float)
  )
)

问题
计算中每个用户行的累计数量 pf_items 还需要检查 buy_sell 字段为0(卖出)或1(买入),并进行相应的加减。
它变得稍微复杂一些 cumulative_quantity_base 要求 quantity btc usd和(例如)btc eur的值合并在一个简单的btc对象数组下。例如,如果 pf_items 与btc美元有关( base_currency 以及 quote_currency )如果买入数量为5,而与btc eur相关的另一行买入数量为7,则需要找到这两行btc的累计值:12。
pf\U货币

CREATE TABLE `pf_currencies` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `symbol` varchar(255) NOT NULL
);

pf\ U历史

CREATE TABLE `pf_currencies_history` (
  `id` int(11) NOT NULL,
  `base_currency` int(11) NOT NULL,
  `quote_currency` int(11) NOT NULL,
  `price` float NOT NULL,
  `date_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

pf\ U投资组合

CREATE TABLE `pf_portfolios` (
  `id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `date_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

pf\U项目

CREATE TABLE `pf_items` (
  `id` int(11),
  `portfolio_id` int(11),
  `action_date` date,
  `price` float,
  `price_usd` float,
  `buy_sell` tinyint(1),
  `quantity` float,
  `base_currency` int(11),
  `quote_currency` int(11),
  `date_added` datetime
)

我的查询这个查询实现了除了 cumulative_quantity 以及 cumulative_quantity_base 如前所述。

SELECT (SELECT
         symbol
       FROM pf_currencies
       WHERE a.base_currency = id)
       AS base_currency,
       (SELECT
         symbol
       FROM pf_currencies
       WHERE a.quote_currency = id)
       AS quote_currency,
       a.price,
       UNIX_TIMESTAMP(a.date_time) AS unix_time
FROM pf_currencies_history a
INNER JOIN pf_items i
  ON i.portfolio_id = (SELECT
    id
  FROM pf_portfolios
  WHERE user_id = ".$userId.")
  AND a.base_currency = i.base_currency
  AND a.quote_currency = i.quote_currency
ORDER BY unix_time DESC

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题