我有一个如下所示的表:
传感器 | 时间 | 值 | |
---|---|---|---|
靠近 | 2 | 0.3 | |
接近 | 3 | 0.8 | |
远 | 2 | 0.2 | |
远 | 5 | 0.0 | |
远 | 4 | 0.1 |
您也可以使用array_sort
和transform
来完成此操作。
WITH sorted_structs AS (
SELECT sensor,
ARRAY_SORT(
ARRAY_AGG(st),
(left, right) -> case when left.time < right.time then -1 when left.time > right.time then 1 else 0 end
) AS sorted_struct_array
FROM (
SELECT
sensor
struct(value, time) as st
FROM sensor_table
) as sensor_struct
GROUP BY feature_key
)
SELECT sensor,
TRANSFORM(
sorted_struct_array,
sorted_struct -> sorted_struct.value
) AS sorted_values,
TRANSFORM(
sorted_struct_array,
sorted_struct -> sorted_struct.time
) AS sorted_times
FROM sorted_structs
首先将value
和time
放在结构中,然后将结构值聚合到数组中。您可以根据time
值对结构进行排序。
使用transform
,可以再次将值拆分为不同的列。
您可以使用array_sort
:
对输入数组进行排序。如果省略了func,则按升序排序。输入数组的元素必须是可排序的。对于双精度/浮点型,NaN大于任何非NaN元素。空元素将被放置在返回数组的末尾。
SELECT sensor,
array_sort(ARRAY_AGG(value)) AS values,
array_sort(ARRAY_AGG(time)) AS times
FROM sensor_table
GROUP BY sensor