在这里插入图片描述

UNIQUE 函数用户手册

函数定义

UNIQUE(expr)

功能说明

UNIQUE() 函数返回指定列去重后的值,功能类似于 SQL 中的 DISTINCT 关键字。对于相同的数据值,UNIQUE 函数会返回时间戳最小的那一条记录。该函数会跳过 NULL 值。

版本要求

  • 最低版本: v3.0.0.0

返回值

  • 数据类型: 与输入参数相同的数据类型
  • 返回内容: 去重后的值集合及其对应的时间戳

参数说明

参数 类型 说明 取值范围
expr 表达式 要去重的字段表达式 所有数据类型

适用数据类型

UNIQUE 函数支持以下数据类型:

  • 所有数据类型: 数值类型、字符串类型、时间戳类型、布尔类型等

适用范围

  • 表类型: 表和超级表
  • 查询支持: 支持选择查询、多行返回
  • 函数特性: 选择函数、多行函数、隐式时间戳函数、主键函数

基本用法示例

单列查询

-- 返回电流的所有不同值
SELECT UNIQUE(current) FROM meters;

-- 返回电压的所有不同值
SELECT UNIQUE(voltage) FROM meters;

-- 返回相位的所有不同值
SELECT UNIQUE(phase) FROM meters;

带时间戳查询

-- 返回电流不同值及其首次出现的时间戳
SELECT 
    ts,
    UNIQUE(current) as unique_current_values
FROM meters;

带其他列查询

-- 返回包含标签信息的 UNIQUE 查询
SELECT 
    location,
    UNIQUE(current) as unique_current,
    ts
FROM meters;

智能电表场景应用示例

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

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

场景1:全局数据去重分析

-- 查看所有电表记录过的不同电流值
SELECT UNIQUE(current) as current_levels FROM meters;

-- 查看所有电表记录过的不同电压值
SELECT UNIQUE(voltage) as voltage_levels FROM meters;

-- 查看所有电表记录过的不同相位值
SELECT UNIQUE(phase) as phase_levels FROM meters;

场景2:单个电表数据去重

-- 查看特定电表的不同电流使用模式
SELECT 
    UNIQUE(current) as device_current_patterns,
    ts as first_occurrence
FROM meters 
WHERE tbname = 'd1001';

-- 查看特定电表的不同电压模式
SELECT 
    UNIQUE(voltage) as device_voltage_patterns,
    ts as first_occurrence
FROM meters 
WHERE tbname = 'd1001';

场景3:区域数据去重分析

-- 查看北京地区电表的不同电流值
SELECT 
    location,
    UNIQUE(current) as regional_current_patterns,
    ts as first_occurrence
FROM meters 
WHERE location = 'Beijing';

-- 查看上海地区电表的不同电压值
SELECT 
    location,
    UNIQUE(voltage) as regional_voltage_patterns,
    ts as first_occurrence
FROM meters 
WHERE location = 'Shanghai';

场景4:时间段内的数据去重

-- 分析最近一周的用电模式变化
SELECT 
    UNIQUE(current) as weekly_current_patterns,
    ts as pattern_first_seen
FROM meters 
WHERE ts >= NOW() - 7d;

-- 分析工作日的用电模式
SELECT 
    UNIQUE(current) as weekday_patterns,
    ts as pattern_start_time
FROM meters 
WHERE WEEKDAY(ts) BETWEEN 1 AND 5;

场景5:负载档位分析

-- 分析所有电表的负载档位(去重后的电流值)
SELECT 
    UNIQUE(current) as load_levels,
    ts as level_first_seen
FROM meters 
ORDER BY load_levels;

-- 分析高负载时段的电流模式
SELECT 
    UNIQUE(current) as high_load_patterns,
    ts as high_load_first_time
FROM meters 
WHERE current > 20;

场景6:电力质量标准检测

-- 检测系统中出现过的电压标准
SELECT 
    UNIQUE(voltage) as voltage_standards,
    ts as standard_first_detected
FROM meters 
ORDER BY voltage_standards;

-- 检测异常电压值
SELECT 
    UNIQUE(voltage) as abnormal_voltages,
    ts as anomaly_first_detected
FROM meters 
WHERE voltage < 200 OR voltage > 250;

场景7:设备特定分析

-- 分析特定设备组的运行特征
SELECT 
    UNIQUE(current) as group_current_patterns,
    ts as pattern_first_occurrence
FROM meters 
WHERE groupid = 1;

-- 分析特定设备的电气特征
SELECT 
    UNIQUE(current) as device_current_signature,
    UNIQUE(voltage) as device_voltage_signature,
    ts as signature_timestamp
FROM meters 
WHERE tbname = 'd1001';

场景8:数据质量检查

-- 检查最近记录中的数据完整性
SELECT 
    UNIQUE(current) as recent_current_values,
    ts as value_first_seen
FROM meters 
WHERE ts >= NOW() - 1h;

-- 检查数据的离散程度
SELECT 
    COUNT(UNIQUE(current)) as current_diversity,
    MAX(ts) as latest_record
FROM meters;

场景9:异常检测数据准备

-- 获取异常电流值用于分析
SELECT 
    UNIQUE(current) as abnormal_current,
    ts as anomaly_first_time
FROM meters 
WHERE current > 30 OR current < 0;

-- 获取系统中的所有相位值
SELECT 
    UNIQUE(phase) as phase_variations,
    ts as variation_first_detected
FROM meters;

场景10:基准值建立

-- 建立电流基准值库
SELECT 
    UNIQUE(current) as current_baselines,
    ts as baseline_established
FROM meters 
WHERE ts >= NOW() - 30d;

-- 建立电压基准值库
SELECT 
    UNIQUE(voltage) as voltage_baselines,
    ts as baseline_timestamp
FROM meters 
WHERE voltage BETWEEN 200 AND 240;

场景11:设备运行模式识别

-- 识别设备的不同运行模式(基于电流值)
SELECT 
    UNIQUE(current) as operating_modes,
    ts as mode_first_detected
FROM meters 
WHERE tbname IN ('d1001', 'd1002', 'd1003');

-- 识别低功耗模式
SELECT 
    UNIQUE(current) as low_power_modes,
    ts as mode_detected_time
FROM meters 
WHERE current < 5;

场景12:历史数据模式分析

-- 分析历史数据中的电流模式
SELECT 
    UNIQUE(current) as historical_patterns,
    ts as pattern_origin_time
FROM meters 
WHERE ts BETWEEN '2024-01-01 00:00:00' AND '2024-01-31 23:59:59';

-- 分析夜间用电模式
SELECT 
    UNIQUE(current) as night_patterns,
    ts as night_pattern_time
FROM meters 
WHERE HOUR(ts) BETWEEN 22 AND 6;

与传统 DISTINCT 的对比

-- UNIQUE 函数方式(推荐,返回时间戳信息)
SELECT 
    UNIQUE(current) as unique_current,
    ts
FROM meters 
WHERE tbname = 'd1001';

-- 传统 DISTINCT 方式(只返回去重值)
SELECT DISTINCT current 
FROM meters 
WHERE tbname = 'd1001';

注意事项

  1. NULL 值处理: UNIQUE 函数会跳过 NULL 值,不会包含在返回结果中
  2. 时间戳选择: 对于相同的值,返回时间戳最小的那一条记录
  3. 多行返回: UNIQUE 函数会返回多行结果
  4. 必须包含列: 参数必须包含列引用,不能是纯常量表达式
  5. 隐式时间戳: 函数会隐式返回对应的时间戳信息
  6. 不支持分组: UNIQUE 函数不能在 GROUP BY 查询中使用
  7. 不支持窗口: UNIQUE 函数不能在窗口查询中使用
  8. 性能考虑: 在大表上使用时建议配合适当的 WHERE 条件过滤

相关函数

  • MODE(): 返回出现频率最高的值
  • SAMPLE(): 返回随机采样的 k 个值
  • TOP(): 返回最大的 k 个值
  • BOTTOM(): 返回最小的 k 个值
  • FIRST(): 返回最先的非 NULL 值
  • LAST(): 返回最后的非 NULL 值

关于 TDengine

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

Logo

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

更多推荐