本帖最后由 Guandata_5126af71 于 2026-1-19 15:25 编辑
在数据抽取的 数据准备->SQL查询页面能使用递归函数吗?想使用递归函数生成一张完整的到分钟级别的日历表
执行会报错提示没有权限访问minute_series,但是minute_series是创建的临时表啊
报错的步骤是:
- 生成连续分钟序列
minute_series AS (
SELECT min_time AS minute_time
FROM all_minutes
UNION ALL
SELECT DATE_ADD(minute_time, INTERVAL 1 MINUTE)
FROM minute_series, all_minutes
WHERE minute_time < max_time
)
----------------------------------------------------------------------------------------------------------------------------------------------------
具体的SQL:
1、生成所需生成日历表的时间区间
WITH all_minutes AS (
SELECT
MIN(time) AS min_time,
MAX(time) AS max_time
FROM 库里实体表1
),
-- 生成连续分钟序列
minute_series AS (
SELECT min_time AS minute_time
FROM all_minutes
UNION ALL
SELECT DATE_ADD(minute_time, INTERVAL 1 MINUTE)
FROM minute_series, all_minutes
WHERE minute_time < max_time
),
--原始数据处理
processed_data AS (
SELECT
device_id,
monitor,
monitor_type_id,
DATE_TRUNC('minute',time) AS minute_time,
MAX(CASE WHEN SECOND(time) = 0 THEN value END) AS exact_value,
AVG(value) AS avg_value
FROM 库里实体表1
GROUP BY device_id, monitor, monitor_type_id,
DATE_TRUNC('minute',time)
)
--加工完成
SELECT
B2.device_id,
B2.monitor,
B2.monitor_type_id,
a.minute_time AS time,
COALESCE(C3.exact_value, C3.avg_value) AS value
FROM minute_series a
CROSS JOIN (
SELECT DISTINCT device_id, monitor, monitor_type_id
FROM 库里实体表1
) B2
LEFT JOIN processed_data C3
ON a.minute_time = C3.minute_time
AND B2.device_id = C3.device_id
AND B2.monitor = C3.monitor
AND B2.monitor_type_id = C3.monitor_type_id
ORDER BY a.minute_time, B2.device_id, B2.monitor, B2.monitor_type_id;
|