SQL - 按时间序列聚合

时间:2016-01-18 13:04:08

标签: sql netezza

我需要找到表格中每秒可能有一个或多个记录的字段的每秒聚合数据,如表1所示:

表1

'${foo}'

预期的table2输出如下。 Time field1 09:37.43.755 0 09:37.44.256 0 09:37.44.757 0 09:37.44.758 1 09:37.45.756 0 09:37.45.759 1 09:37.46.758 1 每秒应有一个值 - 基于聚合规则 - > 1的计数/ 0的计数,但如果0的计数为零,则该秒的filed1_agg应为1.

表2

field1_agg

2 个答案:

答案 0 :(得分:3)

您可以使用date_trunc()time列四舍五入到秒。其余的只是聚合和一些条件:

select date_trunc('second', time) as time,
       (case when max(field1) = 0 then 1
             else sum(field1) / sum(1 - field1)
        end) as field1_agg
from table1
group by date_trunc('second', time)
order by date_trunc('second', time);

注意:我简化了逻辑,假设field1的值仅为1或0.您可以更明确:

(case when sum(case when field1 = 0 then 1 else 0 end) = 0 then 0
      else (sum(case when field1 = 1 then 1 else 0 end) /
            sum(case when field1 = 0 then 1 else 0 end) 
           )
  end)

答案 1 :(得分:0)

此代码有效。试试吧。

SELECT dateadd(millisecond, -datepart(millisecond, time), time) time,
       SUM(CASE field1 WHEN 1 THEN 1.0 ELSE 0.0 end)/
       (case SUM(CASE field1 WHEN 0 THEN 1.0 ELSE 0.0 end) WHEN 0 THEN 1.0 ELSE SUM(CASE field1 WHEN 0 THEN 1.0 ELSE 0.0 end) END) field1_agg FROM table1
       GROUP BY dateadd(millisecond, -datepart(millisecond, time), time)