如时间字段1,从2022-07-13 00:00:00到2022-07-13 02:00:00有10行数据升序排序,用这个字段计算得到字段2:字段2的第一行直接等于字段1的第一行,第二行开始用计算得到:字段1的第二行减去字段2的第一行大于五秒,则选择字段1第二行,否则选字段2第一行保存至字段2第二行,以此类推,直到字段1第n行和字段2第n-1行计算完毕
使用窗口函数dt,lead(dt) over(order by dt),这个是下移,然后在进行判断,为空去dt的值
dt日期默认升序
2022-07-13 00:00:00
2022-07-13 00:00:06
2022-07-13 00:00:11
2022-07-13 00:00:14
2022-07-13 00:04:00
2022-07-13 00:04:05
2022-07-13 00:04:07
2022-07-13 00:04:32
2022-07-13 01:33:07
2022-07-13 01:33:10
with TMP as
(select dt,lead(dt,1) over(order by dt) tmp_dt from tabe1)
select dt,case when tmp_dt is null
then dt
when EXTRACT(EPOCH FROM (tmp_dt - dt))>5
then tmp_dt
else dt end dt2 from TMP
你这个问题好绕啊
你题目的解答代码如下:
var data = [
{"key1":"2022-07-13 00:00:00"},
{"key1":"2022-07-13 00:00:06"},
{"key1":"2022-07-13 00:00:11"},
{"key1":"2022-07-13 00:00:14"},
{"key1":"2022-07-13 00:04:00"},
{"key1":"2022-07-13 00:04:05"},
{"key1":"2022-07-13 00:04:07"},
{"key1":"2022-07-13 00:04:32"},
{"key1":"2022-07-13 01:33:07"},
{"key1":"2022-07-13 01:33:10"}
];
data[0].key2 = data[0].key1;
for (var i = 1; i < data.length; i++) {
var t1 = new Date(data[i].key1).getTime()/1000;
var t2 = new Date(data[i-1].key2).getTime()/1000;
if (t1-t2 > 5) {
data[i].key2 = data[i].key1;
} else {
data[i].key2 = data[i-1].key2;
}
}
console.log(data);
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
说错了,是字段1的第二行减去字段2的第一行大于五秒,则选择字段1第二行,否则选字段2第一行保存至字段2第二行
参考一下hive窗口函数over 加上rank 希望对你有所帮助