programing

그룹 값은 0까지 SQL(maria DB)에 시간을 기준으로 저장하고 카운트와 함께 합계를 수행합니다.

closeapi 2023. 9. 3. 16:17
반응형

그룹 값은 0까지 SQL(maria DB)에 시간을 기준으로 저장하고 카운트와 함께 합계를 수행합니다.

나는 변수(고유 키)에 대해 15분 간격으로 데이터가 저장된 SQL 테이블을 가지고 있습니다.값은 0을 포함한 각 시간 간격에 대한 임의의 숫자일 수 있습니다.고유 키에 대해 0까지 값을 그룹화하려고 합니다.

예를 들어, 값이 0,0,100,900,30,0,0,0,400,900,100,0,0,0,0,400,500,0,0,0,0,0,0,0,0,0,0과 같이 각 고유 키에 대해 0까지 값을 추가하고 값이 0이 아닌 인스턴스 수(이 경우 3 등)를 카운트하려고 했습니다.

시간(15분 간격) 대비 SQL(mariaDB)에 저장된 데이터가 있습니다.이제 이 데이터는 엔티티의 성능을 결정합니다. 즉, 이 데이터는 초당 15분 간격 내에서 0부터 900까지의 모든 값을 취할 수 있는 문제가 있습니다.이제 모든 시간 간격 기간에 대해 그룹화하고 영향을 받은 총 초를 쉽게 플롯할 수 있습니다.

Parameter_health Database에 두 개의 테이블이 포함되어 있습니다.

  1. parameter_detail 테이블에는 매개 변수에 대한 고정 데이터 정보가 포함되어 있습니다.
  2. parameter_uasvalue 테이블에는 해당 매개 변수에 대한 시간에 대해 15분 간격으로 사용할 수 없는 초(UAS)가 포함되어 있습니다.

함께 그룹화된 총 UAS의 전체 합계인 아래와 같은 SQL 쿼리를 사용했지만 다음 0 값까지 그룹화하고 모든 간격에 대해 해당 이벤트의 총 인스턴스(0이 아닌 이벤트가 아닌 총 인시던트)도 계산하려고 합니다.

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

각 값을 0(합계 실행)까지 그룹화한 다음 SQL 쿼리의 모든 시간 간격에 대해 해당 인스턴스를 카운트하려고 했습니다.parameter_uasvalue 테이블의 테이블 구조는 아래와 같습니다.

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

여기에 이미지 설명 입력

이것은 일종의 격차와 섬 문제입니다.첫 번째 공정 및 그룹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;

그룹화 데모

언급URL : https://stackoverflow.com/questions/70120582/group-values-stores-against-time-in-sql-maria-db-until-zero-and-do-a-summation

반응형