在这里插入图片描述

BOTTOM() 函数用户手册

函数定义

BOTTOM(expr, k)

功能说明

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

返回值

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

参数说明

参数 类型 说明 取值范围
expr 数值类型 要统计的字段表达式 任意数值类型字段
k INTEGER 返回最小值的数量 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() - 7d
    AND 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 HOUR
    AND 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 提供实时分析、可视化、事件管理与报警等功能。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐