创建一个至少有 86400 行的计数表(一天一秒):
create table Tally(n integer primary key not null);
insert into Tally(n) values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
insert into Tally(n) select null from tally n1 , tally n2, tally n3, tally n4, tally n5;
将您的 PVT 表加入当天的转置记录:
select 1119636081000 + tally.n*1000 as Expected, pvt.ts from tally left join pvt on pvt.ts = 1119636081000 + tally.n*1000 where tally.n <= 86400 limit 15;
给定一个我用您的示例数据填充的表格,我将其作为输出:
Expected TS
------------- -------------
1119636081000 1119636081000
1119636082000 1119636082000
1119636083000 1119636083000
1119636084000 1119636084000
1119636085000 1119636085000
1119636086000
1119636087000
1119636088000
1119636089000
1119636090000 1119636090000
1119636091000 1119636091000
1119636092000
1119636093000
1119636094000
1119636095000
如果你在 PVT.TS 为空的地方额外过滤,你应该得到缺失的值:
select 1119636081000 + tally.n*1000 as Expected, pvt.ts from tally left join pvt on pvt.ts = 1119636081000 + tally.n*1000 where tally.n <= 86400 and PVT.ts is null limit 15;
Expected TS
------------- ----------
1119636086000
1119636087000
1119636088000
1119636089000
1119636092000
1119636093000
1119636094000
1119636095000
1119636096000
1119636097000
1119636098000
1119636099000
1119636100000
1119636101000
1119636102000
注意:我使用限制 15 来让自己在控制台上保持理智