在我看來,在SQL中似乎很難做到,但是您需要計算向下舍入到最後5分鐘數量的時間,然後按該數量進行分組。要做到這一點,我必須經過幾個步驟。我如何爲你製作一個標準功能,以幫助保持你的代碼更清潔?我有datepart(minute,d.Time))/ 5)* 5,你可以把5改成任何其他整數或者把它變成一個整數變量 - 它需要整天的一部分日期(如果需要,可以在更高的SQL版本中通過鑄造日期完成),然後到該日期,它會將當天的分鐘數降低到較低的5,然後將它們添加到
select d.Data,
dateadd(minute,
floor((datepart(hour,d.Time) * 60
+ datepart(minute, d.Time))/5) * 5,
cast(convert(nvarchar(8), d.Time, 112) as datetime)
),
avg(d.Count) as [CountVal]
from data d
GROUP BY dateadd(minute,
floor((datepart(hour,d.Time) * 60
+ datepart(minute, d.Time))/5) * 5,
cast(convert(nvarchar(8), d.Time, 112) as datetime)
)
這裏是你必須首先創建
-- ================================================
-- Template generated from Template Explorer using:
-- Create Scalar Function (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION fn_DateTime_n_MinuteSector
(
-- Add the parameters for the function here
@PDATE datetime,
@PNMINS int
)
RETURNS datetime
AS
BEGIN
DECLARE @WDATE datetime;
DECLARE @DAYMINS int;
DECLARE @ROUNDMINS int;
--calculate Whole Date and number of complete minutes elapsed since start of date
SELECT @WDATE = cast(convert(nvarchar(8), @PDATE, 112) as datetime),
@DAYMINS = datepart(hour,@PDATE) * 60 + datepart(minute, @PDATE);
--round down to n minutes in day
SELECT @ROUNDMINS = FLOOR(@DAYMINS/@PNMINS) * @PNMINS;
--create rounded date by adding minutes on to date part
RETURN dateadd(minute , @ROUNDMINS, @WDATE) ;
END
GO
一個函數來完成,然後到u SE的功能在dbo.fn_DateTime_n_MinuteSector(d.time,15)
時間 - minutepart模15? – jarlh