您的位置:首页 > 数据库

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

2015-11-23 10:31 459 查看
以下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


SQL回炉系列(一) 序言

SQL回炉系列(二) 多表联合查询和排序

SQL回炉系列(三) 拆分原始数据到对应的月份表中

SQL回炉系列(四) 删除重复数据

SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: