在 SQL (maria DB) 中根据时间对值存储进行分组,直到为零并与计数一起进行求和
Group values stores against time in SQL (maria DB) until Zero and do a summation along with count
我有 SQL table,其中有针对变量(唯一键)以 15 分钟间隔存储的数据。对于每个时间间隔,该值可以是任何数字,包括零。想要根据唯一键将值分组直到零。
就像如果值是 0,0,100,900,30,0,0,0,400,900,100,0,0,0,0,400,500,0,0 随着时间的推移想要添加值直到零(例如 sum as 1030, 1400, 900 , ... ) 针对每个唯一键并计算值不为零的实例数(例如在本例中为 3 等等)。
我们将数据存储在 SQL (mariaDB) 中(间隔 15 分钟)。现在这个数据决定了一个实体的性能,它是秒(比如 15 分钟间隔内的秒数,它有问题,它可以取 0 到 900 之间的任何值)。现在我们可以在任何时间间隔内对它们进行分组,并轻松绘制受影响的总秒数
Parameter_health 数据库包含两个 table --
- Parameter_detail table包含针对参数的固定数据信息
- Parameter_uasvalue table 包含该参数每 15 分钟间隔的不可用秒数 (UAS)
我使用了下面的 SQL 查询,它是分组在一起的总 UAS 的总和,但我想将它们分组到下一个零值,并计算此类事件的总实例(不是非零事件,但不为零时的总事件)对于任何时间间隔。
在 Grafana 中使用以下查询
SELECT parameter_detail.system, parameter_detail.parameter_label, sum(parameter_uasvalue.uas) as 'Total UAS'
FROM parameter_health.parameter_uasvalue left join parameter_health.parameter_detail on parameter_detail.id=parameter_uasvalue.id
WHERE $__timeFilter(parameter_uasvalue.time) and parameter_uasvalue.uas != '-1' and parameter_uasvalue.uas !=' 0'
GROUP BY parameter_detail.system, parameter_detail.parameter_label
想要对每个值进行分组直到为零(进行求和),然后在 sql 查询中对任何时间间隔的此类实例进行计数。 Table parameter_uasvalue table 的结构如下所示
id time uas
Parameter-Unique Value1 15/11/2021 0:00 0
Parameter-Unique Value1 15/11/2021 0:15 100
Parameter-Unique Value1 15/11/2021 0:30 900
Parameter-Unique Value1 15/11/2021 0:45 30
Parameter-Unique Value1 15/11/2021 1:00 0
Parameter-Unique Value1 15/11/2021 1:15 0
Parameter-Unique Value1 15/11/2021 1:30 400
Parameter-Unique Value1 15/11/2021 1:45 900
Parameter-Unique Value1 15/11/2021 2:00 0
Parameter-Unique Value1 15/11/2021 2:15 0
Parameter-Unique Value1 15/11/2021 2:30 0
Parameter-Unique Value1 15/11/2021 2:45 400
Parameter-Unique Value1 15/11/2021 3:00 500
Parameter-Unique Value1 15/11/2021 3:15 0
Parameter-Unique Value1 15/11/2021 3:30 0
Parameter-Unique Value1 15/11/2021 3:45 0
enter image description here
这是一种间隙和孤岛问题。首先处理和分组 parameter_uasvalue
数据然后加入 Parameter_detail
.
SELECT d.system, d.parameter_label, seriesStart, s, nonzc
from (
select id, min(time) seriesStart, sum(uas) s, count(case when uas > 0 then uas end) nonzc
from (
select id, time, uas, sum(flag) over(partition by id order by time) grp
from (
select id, time, uas, (coalesce(lag(uas, 1) over(partition by id order by time),0) = 0 and uas != 0) flag
from parameter_health.parameter_uasvalue t
where $__timeFilter(time) and uas != -1
-- it will break series detection
-- and uas != 0
) t
) t
group by id, grp
) t
left join parameter_health.parameter_detail d on d.id=t.id
order by d.system, d.parameter_label, seriesStart;
我有 SQL table,其中有针对变量(唯一键)以 15 分钟间隔存储的数据。对于每个时间间隔,该值可以是任何数字,包括零。想要根据唯一键将值分组直到零。
就像如果值是 0,0,100,900,30,0,0,0,400,900,100,0,0,0,0,400,500,0,0 随着时间的推移想要添加值直到零(例如 sum as 1030, 1400, 900 , ... ) 针对每个唯一键并计算值不为零的实例数(例如在本例中为 3 等等)。
我们将数据存储在 SQL (mariaDB) 中(间隔 15 分钟)。现在这个数据决定了一个实体的性能,它是秒(比如 15 分钟间隔内的秒数,它有问题,它可以取 0 到 900 之间的任何值)。现在我们可以在任何时间间隔内对它们进行分组,并轻松绘制受影响的总秒数
Parameter_health 数据库包含两个 table --
- Parameter_detail table包含针对参数的固定数据信息
- Parameter_uasvalue table 包含该参数每 15 分钟间隔的不可用秒数 (UAS)
我使用了下面的 SQL 查询,它是分组在一起的总 UAS 的总和,但我想将它们分组到下一个零值,并计算此类事件的总实例(不是非零事件,但不为零时的总事件)对于任何时间间隔。
在 Grafana 中使用以下查询
SELECT parameter_detail.system, parameter_detail.parameter_label, sum(parameter_uasvalue.uas) as 'Total UAS'
FROM parameter_health.parameter_uasvalue left join parameter_health.parameter_detail on parameter_detail.id=parameter_uasvalue.id
WHERE $__timeFilter(parameter_uasvalue.time) and parameter_uasvalue.uas != '-1' and parameter_uasvalue.uas !=' 0'
GROUP BY parameter_detail.system, parameter_detail.parameter_label
想要对每个值进行分组直到为零(进行求和),然后在 sql 查询中对任何时间间隔的此类实例进行计数。 Table parameter_uasvalue table 的结构如下所示
id time uas
Parameter-Unique Value1 15/11/2021 0:00 0
Parameter-Unique Value1 15/11/2021 0:15 100
Parameter-Unique Value1 15/11/2021 0:30 900
Parameter-Unique Value1 15/11/2021 0:45 30
Parameter-Unique Value1 15/11/2021 1:00 0
Parameter-Unique Value1 15/11/2021 1:15 0
Parameter-Unique Value1 15/11/2021 1:30 400
Parameter-Unique Value1 15/11/2021 1:45 900
Parameter-Unique Value1 15/11/2021 2:00 0
Parameter-Unique Value1 15/11/2021 2:15 0
Parameter-Unique Value1 15/11/2021 2:30 0
Parameter-Unique Value1 15/11/2021 2:45 400
Parameter-Unique Value1 15/11/2021 3:00 500
Parameter-Unique Value1 15/11/2021 3:15 0
Parameter-Unique Value1 15/11/2021 3:30 0
Parameter-Unique Value1 15/11/2021 3:45 0
enter image description here
这是一种间隙和孤岛问题。首先处理和分组 parameter_uasvalue
数据然后加入 Parameter_detail
.
SELECT d.system, d.parameter_label, seriesStart, s, nonzc
from (
select id, min(time) seriesStart, sum(uas) s, count(case when uas > 0 then uas end) nonzc
from (
select id, time, uas, sum(flag) over(partition by id order by time) grp
from (
select id, time, uas, (coalesce(lag(uas, 1) over(partition by id order by time),0) = 0 and uas != 0) flag
from parameter_health.parameter_uasvalue t
where $__timeFilter(time) and uas != -1
-- it will break series detection
-- and uas != 0
) t
) t
group by id, grp
) t
left join parameter_health.parameter_detail d on d.id=t.id
order by d.system, d.parameter_label, seriesStart;