• Run this query and study the results. If you are still unsure then ask:

    SELECT

    DateAndTime,

    AbsoluteMinutes, -- minutes since 19000101.

    AbsoluteMinutes/60.00, -- INT divided by DECIMAL: decimal fraction retained.

    AbsoluteMinutes/60, -- INT divided by INT: decimal fraction truncated.

    (AbsoluteMinutes/60)*60, -- round down to nearest hour boundary. Brackets for clarity.

    RoundedDateAndTime = dateadd(minute,AbsoluteMinutes/60*60,0)

    FROM ( -- some sample data

    SELECT DateAndTime = GETDATE() UNION ALL

    SELECT DateAndTime = DATEADD(minute,10,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,20,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,30,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,40,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,50,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,60,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,70,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,80,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,90,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,100,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,110,GETDATE()) UNION ALL

    SELECT DateAndTime = DATEADD(minute,120,GETDATE())

    ) t

    CROSS APPLY (SELECT AbsoluteMinutes = datediff(minute,0,DateAndTime)) x

    Your query has much scope for improvement. Try this - if the figures are out, it shouldn't take much effort to tweak:

    ;WITH temp56 AS (

    SELECT

    DateAndTime,

    kwh= SUM(CASE WHEN tagindex = 0 THEN Val ELSE 0 END),

    PF= SUM(CASE WHEN tagindex = 1 THEN Val ELSE 0 END),

    LLAVG= SUM(CASE WHEN tagindex = 2 THEN Val ELSE 0 END),

    LNAVG= SUM(CASE WHEN tagindex = 3 THEN Val ELSE 0 END),

    [avg CURRENT]= SUM(CASE WHEN tagindex = 4 THEN Val ELSE 0 END),

    frequency= SUM(CASE WHEN tagindex = 5 THEN Val ELSE 0 END)

    FROM dbo.FloatTable

    WHERE tagindex BETWEEN 0 AND 5

    AND dateandtime >= @st

    AND dateandtime <= DATEADD(dd,1,@st)

    GROUP BY DateAndTime

    )

    SELECT

    DateAndTime = x.DateGroup,

    KWH= AVG(kwh),

    PF= AVG(PF),

    LLAVG= AVG(LLAVG),

    LNAVG= AVG(LNAVG),

    AVGCURRENT= AVG([AVG CURRENT]),

    FREQ= AVG(frequency)

    FROM temp56

    CROSS APPLY (

    SELECT DateGroup = CASE

    WHEN @typ IN (15,30,60) THEN DATEADD(MINUTE,DATEDIFF(MINUTE,0,DateAndTime)/@typ*@typ,0)

    ELSE DateAndTime END

    ) x

    GROUP BY x.DateGroup

    ORDER BY x.DateGroup

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden