问答 查看内容
返回列表

MySql数据库抽取数据能使用递归吗?

31 1
发表于 昨天 15:21 | 查看全部 阅读模式
本帖最后由 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;

评论1

Guandata_5126af71楼主Lv.1 发表于 昨天 17:21 | 查看全部
换了个方式实现了

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表