如何计算grafana / postgres中不同记录的列值之间的差异

时间:2019-03-12 13:57:08

标签: postgresql plot grafana

我已经安装并连接了Grafana和postgres。我使用grafana显示添加到postgres的数据图表。我的postgres数据库有一个表,其中包含来自多个来源的记录。模式如下:

time   | source | bid | ask
12:01  | bitmex | 10  | 11
12:01  | deribit| 10  | 11
12:02  | bitmex | 9   | 11

每个来源的确切时间是不同的。我可以为每个来源绘制不同的线条:

enter image description here

我希望绘制两个不同来源的差异(每分钟分组)。我认为我需要选择“ source = x”和“ source = y”的分组分钟数并减去它们,同时保留Grafana中的时间宏以使整个过程保持快速。谁能指出我正确的方向?我认为用grafana中的“图形查询生成器”根本不可能。

2 个答案:

答案 0 :(得分:0)

我无法在grafana中做到这一点(减去两个查询),而能够通过postgres查询(包括grafana宏)来做到这一点:

SELECT (first / second * 10000 - 10000) as spread, time
FROM 
  (
    SELECT   $__timeGroupAlias("time",$__interval,previous), avg(bid) AS "first"
    FROM     bbo_20s
    WHERE    $__timeFilter("time") AND market = 1
    GROUP BY time
  ) AS e
FULL JOIN 
  (
  SELECT   $__timeGroupAlias("time",$__interval,previous), avg(bid) AS "second"
  FROM     bbo_20s
  WHERE    $__timeFilter("time") AND market = 2
  GROUP BY time
  ) AS c 
USING ("time") ;

结果看起来像这样,并且表现出色:

enter image description here

答案 1 :(得分:0)

我正在尝试做类似的事情。我没有执行连接,而是执行了一个查询,并在1个查询中进行了数学运算,然后返回了我要查找的结果。

  floor(extract(epoch from finished)/20)*20 AS "time",
  first.value AS "value"
FROM (
  SELECT
    $__timeGroupAlias(finished,$__interval,0),
    finished,
    id,
    (extract(epoch from minion_jobs.finished) * 1000) - (extract(epoch from minion_jobs.created) * 1000) AS value
  FROM minion_jobs
  WHERE queue = 'parallel'
  GROUP BY value,minion_jobs.finished, id
)AS first