SQL回炉系列(二) 多表联合查询和视图

来源:互联网 发布:如何注册农村淘宝网店 编辑:程序博客网 时间:2024/05/07 23:35

以下SQL脚本用于查询每个监测电表的即时功率和同时刻工作日的历史最大最小功率,涉及四张表:

  • 即时数据表 cf_originaldata
  • 电表信息表 StationInfo
  • 历史记录表 HistoryMaxPower
  • 日期信息表 WorkCalendar

即时数据表存放即时数据,每个电表每30秒采集一次数据存入;
电表信息表有表的ID,名字等信息;
历史记录表统计了每个电表一天中每个30秒单位的历史最大和最小功率,分工作日和非工作日,以isWorkDay字段区分;
日期信息表存放了日期信息,年月日星期几,是否是工作日等;
查询结果以显示为视图。

SQL语句如下:

USE [ZSJ]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER VIEW [dbo].[RealPowerWithMaxMinView]ASSELECT ROW_NUMBER() over(order by c1.back) as rows,       c2.StationID back,       py,       StationName,       switchResult,       max_py,       min_py,       count(distinct c2.StationID) notusedfrom (    SELECT back, py    FROM   dbo.cf_originaldata    WHERE  getTime>DATEADD(SS, -20, GETDATE())    and gettime =  (SELECT   TOP 1 gettime                    FROM     dbo.cf_originaldata                    ORDER BY AutoId DESC)) c1right join StationInfo c2 on c1.back=c2.StationIDleft join (    select max_py,min_py,StationID from dbo.HistoryMaxPower    where time=(select top 1 time from HistoryMaxPower where time<convert(varchar(100),getdate(),8) order by time desc)    and isWorkDay= (select isWorkDay from dbo.WorkCalendar where convert(varchar(10),the_date,120)=convert(varchar(10),GetDate(),120))) c3on c2.StationID=c3.StationID group by c1.back,c2.StationID, py, StationName, switchResult,max_py, min_pyGO
  • SQL回炉系列(一) 序言
  • SQL回炉系列(二) 多表联合查询和排序
  • SQL回炉系列(三) 拆分原始数据到对应的月份表中
  • SQL回炉系列(四) 删除重复数据
  • SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据
0 0
原创粉丝点击