时序舍入
Vertica 按照与时间戳 2000-01-01 00:00:00
相关的相同间隔计算所有时序。Vertica 根据需要对时序时间戳进行四舍五入以符合此基线。对于指定的间隔,开始时间也会向下舍入为最接近的整数。
根据此逻辑,TIMESERIES 子句将生成时间戳系列,如以下部分所述。
分
分钟时序会向下舍入为整数分钟。例如,以下语句指定了 00:00:03
‑ 00:05:50
这一时间范围:
=> SELECT ts FROM (
SELECT '2015-01-04 00:00:03'::TIMESTAMP AS tm
UNION
SELECT '2015-01-04 00:05:50'::TIMESTAMP AS tm
) t
TIMESERIES ts AS '1 minute' OVER (ORDER BY tm);
Vertica 将时间序列的开始时间和结束时间四舍五入到整分钟,分别为 00:00:00
和 00:05:00
:
ts
---------------------
2015-01-04 00:00:00
2015-01-04 00:01:00
2015-01-04 00:02:00
2015-01-04 00:03:00
2015-01-04 00:04:00
2015-01-04 00:05:00
(6 rows)
周
因为基线时间戳 2000-01-01 00:00:00
为星期六,所有周时序都从星期六开始。Vertica 相应地向下舍入了时序的开始和结束时间戳。例如,以下语句指定了 12/10/99 ‑ 01/10/00 的时间跨度:
=> SELECT ts FROM (
SELECT '1999-12-10 00:00:00'::TIMESTAMP AS tm
UNION
SELECT '2000-01-10 23:59:59'::TIMESTAMP AS tm
) t
TIMESERIES ts AS '1 week' OVER (ORDER BY tm);
指定的时间范围从星期五 (12/10/99) 开始,因此 Vertica 从上一个星期六 (12/04/99) 开始时序。时序结束于时间范围中的最后一个星期六,即 01/08/00:
ts
---------------------
1999-12-04 00:00:00
1999-12-11 00:00:00
1999-12-18 00:00:00
1999-12-25 00:00:00
2000-01-01 00:00:00
2000-01-08 00:00:00
(6 rows)
月
月时序会相对于基线时间戳 2000-01-01 00:00:00
分为相等的 30 天间隔。例如,以下语句指定了 09/01/99 ‑ 12/31/00 这一时间范围:
=> SELECT ts FROM (
SELECT '1999-09-01 00:00:00'::TIMESTAMP AS tm
UNION
SELECT '2000-12-31 23:59:59'::TIMESTAMP AS tm
) t
TIMESERIES ts AS '1 month' OVER (ORDER BY tm);
Vertica 生成了一系列 30 天的间隔,其中每个时间戳都相对于基线时间戳进行了向上舍入或向下舍入:
ts
---------------------
1999-08-04 00:00:00
1999-09-03 00:00:00
1999-10-03 00:00:00
1999-11-02 00:00:00
1999-12-02 00:00:00
2000-01-01 00:00:00
2000-01-31 00:00:00
2000-03-01 00:00:00
2000-03-31 00:00:00
2000-04-30 00:00:00
2000-05-30 00:00:00
2000-06-29 00:00:00
2000-07-29 00:00:00
2000-08-28 00:00:00
2000-09-27 00:00:00
2000-10-27 00:00:00
2000-11-26 00:00:00
2000-12-26 00:00:00
(18 rows)
年
年时序分为相等的 365 天间隔。如果时间范围重叠了自基线时间戳 2000-01-01 00:00:00
以来或在该基线时间戳以前的闰年,Vertica 将相应地对时序时间戳进行四舍五入。
例如,以下语句指定了 01/01/95 ‑ 05/08/09 这一时间范围,此时间范围重叠了四个闰年,包括基线时间戳:
=> SELECT ts FROM (
SELECT '1995-01-01 00:00:00'::TIMESTAMP AS tm
UNION
SELECT '2009-05-08'::TIMESTAMP AS tm
) t timeseries ts AS '1 year' over (ORDER BY tm);
Vertica 生成了一系列时间戳,它们都相对于基线时间戳进行了向上舍入或向下舍入:
ts
---------------------
1994-01-02 00:00:00
1995-01-02 00:00:00
1996-01-02 00:00:00
1997-01-01 00:00:00
1998-01-01 00:00:00
1999-01-01 00:00:00
2000-01-01 00:00:00
2000-12-31 00:00:00
2001-12-31 00:00:00
2002-12-31 00:00:00
2003-12-31 00:00:00
2004-12-30 00:00:00
2005-12-30 00:00:00
2006-12-30 00:00:00
2007-12-30 00:00:00
2008-12-29 00:00:00
(16 rows)