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

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

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

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

SQL语句如下:

USE [ZSJ]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER VIEW [dbo].[RealPowerWithMaxMinView]
AS
SELECT ROW_NUMBER() over(order by c1.back) as rows,
       c2.StationID back,
       py,
       StationName,
       switchResult,
       max_py,
       min_py,
       count(distinct c2.StationID) notused
from 
(
    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)
) c1
right join StationInfo c2 
on c1.back=c2.StationID
left 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))
) c3
on c2.StationID=c3.StationID 
group by c1.back,c2.StationID, py, StationName, switchResult,max_py, min_py

GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值