Why not simplify the whole thing by doing something like this:
SET @reportDate = '2009-01-10 00:00:00.000' --hard coded date for now
SELECT
sr.SiteName,
b.BldgName AS BuildingName,
mm.CommodityType,
@reportDate AS DaySelected,
DATEPART(hour, dls.TimeStampUTC) AS [HOUR],
MAX(dl.value) AS MaxValue,
MIN(dl.value) AS MinValue,
(MAX(dl.value) - MIN(dl.value))AS Consumption
FROM
Ion_Data_Test..DataLogStamp dls
INNER JOIN Ion_Data_Test..DataLog dl
ON dls.ID = dl.DataLogStampID
INNER JOIN ION_Data_Test..Source s
ON s.ID = dls.SourceID
INNER JOIN TEE..MeterMapper mm
ON mm.Meter_Name = s.Name
INNER JOIN TEE..TEGInstance ti
ON mm.TEGInstanceID = ti.ID
INNER JOIN TEE..SiteRef sr
ON sr.ID = ti.SiteRefID
INNER JOIN TEE..Building b
ON b.ID = mm.Bldg_ID
WHERE
dls.SourceID = 8
AND dl.QuantityID = '10005' --KWH
AND mm.CommodityType = 'ELECTRICITY'
AND dls.TimeStampUTC >= @reportDate
AND dls.TimeStampUTC < @reportDate + 1
GROUP BY
sr.SiteName,
b.BldgName,
mm.commodityType,
DATEPART(hour, dls.TimeStampUTC);
Also, there's a more efficient way to round to the nearest hour:
declare @TimeVariable datetime;
select @TimeVariable = '6/9/09 4:11 PM';
select dateadd(hour, datediff(hour, 0, @TimeVariable), 0);
- Gus "GSquared", RSVP, OODA, MAP, NMVP, FAQ, SAT, SQL, DNA, RNA, UOI, IOU, AM, PM, AD, BC, BCE, USA, UN, CF, ROFL, LOL, ETC
Property of The Thread
"Nobody knows the age of the human race, but everyone agrees it's old enough to know better." - Anon