当前位置: 首页 > news >正文

TDengine 选择函数 BOTTOM() 用户手册

在这里插入图片描述

BOTTOM() 函数用户手册

函数定义

BOTTOM(expr, k)

功能说明

BOTTOM() 函数统计表/超级表中某列的值最小 k 个非 NULL 值。如果多条数据取值一样,全部取用又会超出 k 条限制时,系统会从相同值中随机选取符合要求的数量返回。

返回值

  • 数据类型: 同应用的字段
  • 返回内容: 最小的 k 个值及其对应的时间戳

参数说明

参数类型说明取值范围
expr数值类型要统计的字段表达式任意数值类型字段
kINTEGER返回最小值的数量1 ≤ k ≤ 100

适用数据类型

  • 数值类型: TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL

适用范围

  • 表类型: 表和超级表
  • 查询支持: 不支持嵌套子查询

使用说明

  1. k 值限制: k 值取值范围为 1≤k≤100
  2. 时间戳返回: 系统同时返回该记录关联的时间戳列
  3. 相同值处理: 当存在相同最小值且超出 k 条限制时,系统随机选取
  4. NULL 值处理: 忽略 NULL 值,只统计非 NULL 值
  5. 限制条件: BOTTOM 函数不支持 FILL 子句

基本用法示例

简单查询

-- 获取电流最小的3个值
SELECT BOTTOM(current, 3) FROM meters;-- 获取电压最小的5个值
SELECT BOTTOM(voltage, 5) FROM meters;-- 获取相位最小的1个值
SELECT BOTTOM(phase, 1) FROM meters;

NULL 值处理

-- BOTTOM 函数自动忽略 NULL 值
SELECT BOTTOM(current, 10) FROM meters;
-- 只返回非 NULL 的最小值

智能电表场景应用示例

基于智能电表数据库结构:

-- 数据库和表结构
USE test;
-- meters 超级表包含 ts, current, voltage, phase 字段和 location, groupid 标签

场景1:故障诊断 - 找出电流异常低的记录

-- 查找电流最低的10个异常记录
SELECT BOTTOM(current, 10) FROM meters 
WHERE ts >= '2024-01-01' AND ts < '2024-02-01';-- 输出结果包含时间戳和电流值,便于定位异常时间点

场景2:按区域查找最低电压

-- 查找每个区域电压最低的5个记录
SELECT location, BOTTOM(voltage, 5) FROM meters 
WHERE ts >= '2024-01-01' AND ts < '2024-02-01'
GROUP BY location;

场景3:设备性能分析 - 最低相位记录

-- 查找相位最低的8个记录,用于分析设备性能
SELECT BOTTOM(phase, 8) FROM meters 
WHERE ts >= '2024-01-01' AND ts < '2024-02-01'AND location = 'California.SanFrancisco';

场景4:电网监控 - 多指标最低值分析

-- 分别查找各项指标的最低值
-- 电流最低的3个值
SELECT 'current' as metric, ts, current as value 
FROM (SELECT BOTTOM(current, 3) FROM meters WHERE ts >= TODAY() - 7d);-- 电压最低的3个值  
SELECT 'voltage' as metric, ts, voltage as value
FROM (SELECT BOTTOM(voltage, 3) FROM meters WHERE ts >= TODAY() - 7d);-- 相位最低的3个值
SELECT 'phase' as metric, ts, phase as value
FROM (SELECT BOTTOM(phase, 3) FROM meters WHERE ts >= TODAY() - 7d);

场景5:按时间段查找异常低值

-- 查找工作时间内电流最低的记录(可能表示设备故障)
SELECT BOTTOM(current, 15) FROM meters 
WHERE ts >= '2024-01-01 08:00:00' AND ts <= '2024-01-01 18:00:00'AND WEEKDAY(ts) NOT IN (5, 6);  -- 排除周末

场景6:设备维护 - 识别性能下降的电表

-- 查找电压最低的20个记录,可能需要维护
SELECT location, BOTTOM(voltage, 20) FROM meters 
WHERE ts >= TODAY() - 30d  -- 最近30天
GROUP BY location;

场景7:电网稳定性分析 - 相位异常检测

-- 查找相位值异常低的记录(接近0或负值)
SELECT BOTTOM(phase, 25) FROM meters 
WHERE ts >= '2024-01-01' AND ts < '2024-02-01'AND phase < 0.1;  -- 相位值异常低

场景8:按设备组查找最低值

-- 按设备组查找电流最低的记录
SELECT groupid, BOTTOM(current, 12) FROM meters 
WHERE ts >= TODAY() - 14d  -- 最近两周
GROUP BY groupid;

场景9:负载分析 - 最低负载时段识别

-- 查找电流最低的时段,用于负载调度参考
SELECT BOTTOM(current, 30) FROM meters 
WHERE ts >= '2024-01-01' AND ts < '2024-01-08'AND WEEKDAY(ts) IN (5, 6);  -- 只看周末的低负载

场景10:质量控制 - 电压质量监控

-- 监控电压质量,找出可能的电压跌落
SELECT location, BOTTOM(voltage, 10) FROM meters 
WHERE ts >= TODAY() - 7dAND voltage < 200  -- 电压异常低的阈值
GROUP BY location;

场景11:结合其他函数进行综合分析

-- 对比最高值和最低值的差异
-- 注意:这需要分别执行两个查询
-- 查询最低电流值
SELECT 'BOTTOM' as type, BOTTOM(current, 5) FROM meters 
WHERE ts >= TODAY() - 1d;-- 查询最高电流值  
SELECT 'TOP' as type, TOP(current, 5) FROM meters 
WHERE ts >= TODAY() - 1d;

场景12:告警系统 - 异常低值监控

-- 设置告警条件,监控异常低的电流值
SELECT location,'LOW_CURRENT_ALERT' as alert_type,BOTTOM(current, 3) 
FROM meters 
WHERE ts >= NOW() - INTERVAL 1 HOURAND current < 5.0  -- 电流异常低的阈值
GROUP BY location;

与其他函数的对比

BOTTOM vs TOP

-- 电流最低的5个值
SELECT 'BOTTOM' as type, BOTTOM(current, 5) FROM meters 
WHERE ts >= TODAY();-- 电流最高的5个值
SELECT 'TOP' as type, TOP(current, 5) FROM meters 
WHERE ts >= TODAY();

BOTTOM vs MIN

-- MIN 只返回最小值,不返回时间戳
SELECT MIN(current) FROM meters WHERE ts >= TODAY();-- BOTTOM 返回最小的k个值及其时间戳
SELECT BOTTOM(current, 1) FROM meters WHERE ts >= TODAY();

性能优化建议

  1. 时间范围限制: 使用适当的时间范围限制来提高查询性能
  2. 索引利用: 确保时间戳字段有适当的索引
  3. k值选择: 根据实际需求选择合适的k值,避免不必要的大值
  4. WHERE条件: 合理使用WHERE条件过滤数据

注意事项

  1. k值限制: k 值必须在 1-100 范围内
  2. 相同值处理: 当存在相同最小值时,系统会随机选取
  3. NULL值忽略: 函数自动忽略 NULL 值
  4. FILL限制: 不支持 FILL 子句
  5. 时间戳返回: 结果总是包含对应的时间戳
  6. 数据类型: 只适用于数值类型字段

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

http://www.xdnf.cn/news/1490833.html

相关文章:

  • Lua > OpenResty HelloWorld
  • [Android]RecycleView的item用法
  • C++ Linux平台开发
  • 如何通过日志先行原则保障数据持久化:Redis AOF 和 MySQL redo log 的对比
  • 【基于yolo和web的垃圾分类系统】
  • pycharm设置编辑区字体大小
  • 408考研——栈代码题常见套路总结
  • Caffeine Count-Min Sketch TinyLFU实现:FrequencySketch
  • 临床研究三千问——临床研究体系的3个维度(8)
  • JAVA:IO流非文本形式文件拷贝
  • 基于ResNet50的智能垃圾分类系统
  • 软件工程:DO-178中的适航要求核心要素
  • docker,本地目录挂载
  • 计算机视觉(十):ROI
  • 元器件--USB TypC接口
  • hot100链表类题目
  • [iOS] push 和 present Controller 的区别
  • FMI(Functional Mock-up Interface,功能模型接口)
  • 基于蚁群算法的量子电路调度研究(Matlab平台)
  • 9.7需求
  • 【Docker】Docker基础
  • Java ConcurrentHashMap 底层原理与线程安全机制深度解析
  • 【PCIe EP 设备入门学习专栏 -- 8.2 PCIe EP 寄存器配置空间介绍】
  • 用博图FB类比c#中sdk的api
  • leetcode 912 排序数组(归并排序)
  • Rocky Linux 10 设置固定IP
  • 对分库分表的实战经验
  • 数据结构 课设
  • hot100-动态规划
  • FPGA数据流分析