0

假设我有一个包含如下数据的表:

         ts          | bandwidth_bytes
---------------------+-----------------
 2021-08-27 22:00:00 |    3792
 2021-08-27 21:45:00 |    1164
 2021-08-27 21:30:00 |    7062
 2021-08-27 21:15:00 |    3637
 2021-08-27 21:00:00 |    2472
 2021-08-27 20:45:00 |    1328
 2021-08-27 20:30:00 |    1932
 2021-08-27 20:15:00 |    1434
 2021-08-27 20:00:00 |    1530
 2021-08-27 19:45:00 |    1457
 2021-08-27 19:30:00 |    1948
 2021-08-27 19:15:00 |    1160

我需要输出这样的东西:

         ts          | bandwidth_bytes
---------------------+-----------------
 2021-08-27 22:00:00 |    15,655
 2021-08-27 21:00:00 |    7166
 2021-08-27 20:00:00 |    6095

我想对bandwidth_bytes超过 1 小时的数据时间戳求和。我想专门在 vsql 中执行此操作。

存在更多列,但为简化起见,我仅显示了这两个列。

4

2 回答 2

1

您可以使用date_trunc()

select [date_trunc('hour', ts)][1] as ts_hh, sum(bandwidth_bytes)
from t
group by ts_hh;
于 2021-08-27T18:16:35.533 回答
0

使用 Vertica 的可爱功能TIME_SLICE()

您不仅可以按小时进行,还可以按 2 或 3 小时的切片进行,这DATE_TRUNC()是不提供的。

您似乎希望所有介于20:00:0121:00:00属于 的时间片21:00:00。然而,在两者DATE_TRUNC()TIME_SLICE(),它20:00:00属于20:59:59同一时间片。所以我在申请前减去了一秒TIME_SLICE()

WITH
-- your in data ...
indata(ts,bandwidth_bytes) AS (
          SELECT TIMESTAMP '2021-08-27 22:00:00',3792
UNION ALL SELECT TIMESTAMP '2021-08-27 21:45:00',1164
UNION ALL SELECT TIMESTAMP '2021-08-27 21:30:00',7062
UNION ALL SELECT TIMESTAMP '2021-08-27 21:15:00',3637
UNION ALL SELECT TIMESTAMP '2021-08-27 21:00:00',2472
UNION ALL SELECT TIMESTAMP '2021-08-27 20:45:00',1328
UNION ALL SELECT TIMESTAMP '2021-08-27 20:30:00',1932
UNION ALL SELECT TIMESTAMP '2021-08-27 20:15:00',1434
UNION ALL SELECT TIMESTAMP '2021-08-27 20:00:00',1530
UNION ALL SELECT TIMESTAMP '2021-08-27 19:45:00',1457
UNION ALL SELECT TIMESTAMP '2021-08-27 19:30:00',1948
UNION ALL SELECT TIMESTAMP '2021-08-27 19:15:00',1160
)
SELECT
  TIME_SLICE(ts - INTERVAL '1 SECOND' ,1,'HOUR','END') AS ts
, SUM(bandwidth_bytes)    AS bandwidth_bytes
FROM indata
GROUP BY 1
ORDER BY 1 DESC;
         ts          | bandwidth_bytes 
---------------------+-----------------
 2021-08-27 22:00:00 |           15655
 2021-08-27 21:00:00 |            7166
 2021-08-27 20:00:00 |            6095
于 2021-08-28T14:23:26.147 回答