有人可以帮助我使用SQL查询来计算一个月的总峰值和关闭值,以及该月的最大/最高峰值/非峰值小时值。
我每天将计量表的每小时值存储在SQL表中。
On-Peak
非高峰
这是数据库表结构:
HourId - Uniqueidentifier
CustomerName - nvarchar(50)
Readingdate - datetime
IntegratedHour - TinyInt
Load - decimal(18,4)
Generation - Decimal (18,4)
LastModified - Datetime
ModifiedBy - nvarchar(50)
答案 0 :(得分:1)
以下是代码,解释如下:
declare @start_date date = '1 Feb 2014'
declare @end_date date = '31 Jul 2014'
with ReadingsMonth as
(
select *, month(ReadingDate) as [month] from readings r
where ReadingDate between @start_date and @end_date
)
, ReadingMonthPeak as
(
select r.[month], r.[load],
case
when h.[date] is not null then 0 -- holiday
when datepart(dw, r.ReadingDate) in (1,7) then 0 -- weekend
when (r.[month] between 4 and 10) and (IntegratedHour < 7 or IntegratedHour > 22) then 0 -- summer
when (r.[month] < 4 or r.[month] > 10) and (IntegratedHour < 8) then 0 -- winter
else 1
end as onpeak
from ReadingsMonth r
left join holidays h on h.[date] = r.ReadingDate
)
select [month], [onpeak], sum([load]) as TotalLoad, max([load]) as MaxLoad
from ReadingMonthPeak
group by [month], [onpeak]
order by [month], [onpeak]
第一次CTE只是增加月份。第二个根据您的规则计算开/关高峰时间。请注意,您需要一个包含所有假日日期的表格。在最终选择中,您只需按月分组和开/关峰值标记。看看小提琴:http://www.sqlfiddle.com/#!3/a87240/5/0。