intervalLengthSum
计算所有范围(数字轴上的段)的并集的总长度。
语法
intervalLengthSum(start, end)
参数
start
— 区间的起始值。 Int32,Int64,UInt32,UInt64,Float32,Float64,DateTime 或 Date。end
— 区间的结束值。 Int32,Int64,UInt32,UInt64,Float32,Float64,DateTime 或 Date。
注意
参数必须是相同的数据类型。否则,将抛出异常。
返回值
示例
- 输入表
┌─id─┬─start─┬─end─┐
│ a │ 1.1 │ 2.9 │
│ a │ 2.5 │ 3.2 │
│ a │ 4 │ 5 │
└────┴───────┴─────┘
在本例中,使用 Float32 类型的参数。函数返回 Float64 类型的返回值。
结果是区间 [1.1, 3.2]
([1.1, 2.9]
和 [2.5, 3.2]
的并集)和 [4, 5]
的长度之和
查询
SELECT id, intervalLengthSum(start, end), toTypeName(intervalLengthSum(start, end)) FROM fl_interval GROUP BY id ORDER BY id;
结果
┌─id─┬─intervalLengthSum(start, end)─┬─toTypeName(intervalLengthSum(start, end))─┐
│ a │ 3.1 │ Float64 │
└────┴───────────────────────────────┴───────────────────────────────────────────┘
- 输入表
┌─id─┬───────────────start─┬─────────────────end─┐
│ a │ 2020-01-01 01:12:30 │ 2020-01-01 02:10:10 │
│ a │ 2020-01-01 02:05:30 │ 2020-01-01 02:50:31 │
│ a │ 2020-01-01 03:11:22 │ 2020-01-01 03:23:31 │
└────┴─────────────────────┴─────────────────────┘
在本例中,使用 DateTime 类型的参数。函数返回以秒为单位的返回值。
查询
SELECT id, intervalLengthSum(start, end), toTypeName(intervalLengthSum(start, end)) FROM dt_interval GROUP BY id ORDER BY id;
结果
┌─id─┬─intervalLengthSum(start, end)─┬─toTypeName(intervalLengthSum(start, end))─┐
│ a │ 6610 │ UInt64 │
└────┴───────────────────────────────┴───────────────────────────────────────────┘
- 输入表
┌─id─┬──────start─┬────────end─┐
│ a │ 2020-01-01 │ 2020-01-04 │
│ a │ 2020-01-12 │ 2020-01-18 │
└────┴────────────┴────────────┘
在本例中,使用 Date 类型的参数。函数返回以天为单位的返回值。
查询
SELECT id, intervalLengthSum(start, end), toTypeName(intervalLengthSum(start, end)) FROM date_interval GROUP BY id ORDER BY id;
结果
┌─id─┬─intervalLengthSum(start, end)─┬─toTypeName(intervalLengthSum(start, end))─┐
│ a │ 9 │ UInt64 │
└────┴───────────────────────────────┴───────────────────────────────────────────┘