PostgreSQL,时间序列 - 寻找一种在一行包含一个或多个零时省略时间戳的方法

问题描述 投票:0回答:1

抱歉,我仍在寻找一种根据特定条件省略行的方法。还可能吗?

我正在修补一种名为 Grafana 的工具,目标是有一天创建有用的可视化效果,利用一个数据库(我自己还没有设置),其中包含来自工厂各种来源的温度读数。

问题:有时传感器无法报告其值,而是记录为零。注意:由于条件

WHERE value <> 0
,它们仅在输出表中显示为空白/空值。然而,无论零/空,它们仍然是错误的,并且会导致图形和计算出现问题。因此,我希望所有受影响的行都消失。偶尔丢失一个时间戳比包含错误的时间戳要好一些。

所以我正在寻找一种查询条件/方法来表示如果一行在其一个(或多个)列中包含零,则应省略整个时间戳。

目前我的查询如下所示:

SELECT 
  time_bucket('20 sec', time) AS time, --20 second time interval
  part AS metric, --AS metric makes the column labels look neat (somehow)
  MAX(value) --pick max value of part within each interval
FROM temp 
WHERE
  temp.machineno = '$MachineNo' --grafana dashboard variable -> select machine from drop menu
    AND $__timeFilter(time) --grafana dashboard filter -> select time window from drop menu
      AND value <> 0 
GROUP BY time, part
ORDER BY time

它输出这样的表:Table 列的名称和数量根据选择的机器而变化,因此我不必知道或指定有关列的任何信息的方法会更好。 (注意:机器是从 grafana 的下拉菜单中选择的,这就是“$MachineNo”所指的。)

作为图表,它看起来像这样: Graph 我们可以将表中的两个空白视为图中的间隙。现在,Grafana 有一个按钮可以在视觉上平滑这些间隙,但它不会将它们从表中删除 - 这意味着如果我要使用这些数字进行计算,它们仍然会导致问题。

而不是这样的表: Unfiltered table

我想要一个像这样的过滤表: Filtered table

我无法真正解释我所尝试过的一切。大部分时间都读了很多书,时不时地尝试了一些东西,但没有任何效果。我能够找到有关如何省略列的信息,但与行有关的信息很少。我尝试使用 DELETE 一次...不确定它是否有效,但幸运的是它没有...我无权从数据库中删除任何内容,而且我也不想这样做。我只是想从输出表中过滤掉明显的错误。

postgresql time-series
1个回答
0
投票

查看您显示的表格,我认为该值是空值而不是 0。 尝试一下

and value <> 0
and value is not null

如果不是这种情况,我需要一个表定义和一些示例数据来测试。

© www.soinside.com 2019 - 2024. All rights reserved.