我有下表。
date2 Group number
2020-28-05 00:00:00 A 55
2020-28-05 00:00:00 B 1.09
2020-28-05 00:00:00 C 1.8
2020-29-05 00:00:00 A 68
2020-29-05 00:00:00 B 1.9
2020-29-05 00:00:00 C 1.19
2020-01-06 00:00:00 A 10
2020-01-06 00:00:00 B 15
2020-01-06 00:00:00 C 0.88
2020-02-06 00:00:00 A 22
2020-02-06 00:00:00 B 15
2020-02-06 00:00:00 C 13
2020-03-06 00:00:00 A 66
2020-03-06 00:00:00 B 88
2020-03-06 00:00:00 C 99
如您所见,本表中缺少2020-30-05和2020-31-05之间的日期。因此,有必要在这些日期填写2020-29-05信息分组。因此,最终输出应如下所示:
date2 Group number
2020-28-05 00:00:00 A 55
2020-28-05 00:00:00 B 1.09
2020-28-05 00:00:00 C 1.8
2020-29-05 00:00:00 A 68
2020-29-05 00:00:00 B 1.9
2020-29-05 00:00:00 C 1.19
2020-30-05 00:00:00 A 68
2020-30-05 00:00:00 B 1.9
2020-30-05 00:00:00 C 1.19
2020-31-05 00:00:00 A 68
2020-31-05 00:00:00 B 1.9
2020-31-05 00:00:00 C 1.19
2020-01-06 00:00:00 A 10
2020-01-06 00:00:00 B 15
2020-01-06 00:00:00 C 0.88
2020-02-06 00:00:00 A 22
2020-02-06 00:00:00 B 15
2020-02-06 00:00:00 C 13
2020-03-06 00:00:00 A 66
2020-03-06 00:00:00 B 88
2020-03-06 00:00:00 C 99
我尝试了以下方法:创建一个临时表(表b),其中只包含2020-28-05到2020-03-06期间的日期,然后使用left merge,从而将这些新日期设为null(以便在null时插入一个case,所以填写最后的\u值)。但是,它不起作用,因为在合并时,我只得到一个日期的空值(但是应该是一个日期的3倍(因为组)。这只是更大数据集的一部分,您能帮助我如何获得必要的输出吗?ps我用vertica
1条答案
按热度按时间ebdffaop1#
是眩晕。vertica有
TIMESERIES
条款,这似乎完全符合您的需要:对于行之间间隔不规则的时间序列,或者在其他规则的时间序列中间隔较长的时间序列,它会创建一个规则的时间序列,每个行对之间的间隔与您在
AS
合同条款TIMESERIES
条款本身。TS_FIRST_VALUE()
以及TS_LAST_VALUE()
函数依赖于该子句,并返回在生成的时间戳处从输入行推导出的正确值。这个正确的值是可以得到的'const'
,即原始行集合中最接近生成的时间戳的行,或'linear'
即,从生成的时间戳之前的原始行和之后的原始行进行插值。为了满足您的需要,您可以使用常量值。请看这里: