SQL SERVER 串表计算数据,日期预处理,group聚类

数据库表一设备基础信息:[T_EQUIPMENT_INFO]

表二 实时温湿度记录[T_EQUIPMENT_COLLECTION_MSG]

表三实时数据报警记录 [T_EQUIPMENT_COLLECTION_DATA]

 计算1,每日各设备数据量,用数据长度把时间进行日期格式化convert(varchar(10),[T_EQUIPMENT_COLLECTION_MSG].[DATE],120) 日期:

  SELECT [T_EQUIPMENT_INFO].[EQUIPMENT_NUM], convert(varchar(10),[T_EQUIPMENT_COLLECTION_MSG].[DATE],120) 日期 ,
  count( [T_EQUIPMENT_COLLECTION_MSG].EQUIPMENT_ID) as 数据量
FROM [ATC_N2Box].[dbo].[T_EQUIPMENT_COLLECTION_MSG] left join [T_EQUIPMENT_INFO] on EQUIPMENT_ID=[T_EQUIPMENT_INFO].ID 
group by [T_EQUIPMENT_INFO].[EQUIPMENT_NUM],convert(varchar(10),[T_EQUIPMENT_COLLECTION_MSG].[DATE],120) 
order by 日期 desc

 

计算2,每日各设备数据报警量:

  SELECT [T_EQUIPMENT_INFO].[EQUIPMENT_NUM], convert(varchar(10),[T_EQUIPMENT_COLLECTION_DATA].[DATE],120) 日期 ,
  count( [T_EQUIPMENT_COLLECTION_DATA].EQUIPMENT_CJ_ID) as 报警数量
FROM [ATC_N2Box].[dbo].[T_EQUIPMENT_COLLECTION_DATA] left join [T_EQUIPMENT_INFO] on EQUIPMENT_ID=[T_EQUIPMENT_INFO].ID 
group by [T_EQUIPMENT_INFO].[EQUIPMENT_NUM],convert(varchar(10),[T_EQUIPMENT_COLLECTION_DATA].[DATE],120) 
order by 日期 desc

 

 计算3,每日各设备报警量与数据量之比,需要上述两个query,再进行二次计算,整数直接除得出的是取整的,先乘以一个浮点数变成浮点数,再用decimal格式化小数点位数,convert(decimal(18,2),(报警数量*100.0/数据量)) as 报警比例

  select a.*,b.报警数量 , convert(decimal(18,2),(报警数量*100.0/数据量)) as 报警比例 from (SELECT [T_EQUIPMENT_INFO].[EQUIPMENT_NUM], 
  convert(varchar(10),[T_EQUIPMENT_COLLECTION_MSG].[DATE],120) 日期 ,  count( [T_EQUIPMENT_COLLECTION_MSG].EQUIPMENT_ID) as 数据量
FROM [ATC_N2Box].[dbo].[T_EQUIPMENT_COLLECTION_MSG] left join [T_EQUIPMENT_INFO] on EQUIPMENT_ID=[T_EQUIPMENT_INFO].ID 
group by [T_EQUIPMENT_INFO].[EQUIPMENT_NUM],convert(varchar(10),[T_EQUIPMENT_COLLECTION_MSG].[DATE],120) 
) a left join (SELECT [T_EQUIPMENT_INFO].[EQUIPMENT_NUM], convert(varchar(10),[T_EQUIPMENT_COLLECTION_DATA].[DATE],120) 日期 ,
  count( [T_EQUIPMENT_COLLECTION_DATA].EQUIPMENT_CJ_ID) as 报警数量
FROM [ATC_N2Box].[dbo].[T_EQUIPMENT_COLLECTION_DATA] left join [T_EQUIPMENT_INFO] on EQUIPMENT_ID=[T_EQUIPMENT_INFO].ID 
group by [T_EQUIPMENT_INFO].[EQUIPMENT_NUM],convert(varchar(10),[T_EQUIPMENT_COLLECTION_DATA].[DATE],120) 
) b on a.EQUIPMENT_NUM=b.EQUIPMENT_NUM and a.日期=b.日期 order by a.日期 desc,报警比例 desc

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值