我在SQL服务器中有一个包含3列的数据表。第一个是DateTime,第二个是&第三是浮动。我试图在特定时间间隔(即每15分钟)之间计算第2列和第3列之间差异的平均值。
我设法找到以下示例
SELECT * FROM dbo.data
WHERE CAST(DateTime AS TIME) BETWEEN '14:00' and '14:30'
但我不确定如何从上述查询的结果中计算第2和第3列之间的差异。我更喜欢在t-sql中执行此操作,除非有人认为在c#中执行此操作会更合适。
由于
修改
2010-01-04 14:30:00.0000000 1.44377 1.44386
2010-01-04 14:30:00.0000000 1.4438 1.44389
2010-01-04 14:30:00.0000000 1.44377 1.44386
2010-01-05 14:00:01.0000000 1.44258 1.44267
结果ID如下所示
0.00009 ie 1.44386 - 1.44377
0.00009 1.44389 - 1.4438
0.00009 1.44386 - 1.44377
0.00009 1.44267 - 1.44258
答案 0 :(得分:1)
如果您只是将日期列投射为TIME
,那么您最终会有多个日期,我认为这不是您的意图(请参阅下面第一个查询的结果来说明我的意思)< / p>
DECLARE @Date DATETIME
SELECT @Date = '05/15/2012 14:15'
SELECT CAST(@Date AS TIME)
SELECT @Date = '04/15/2012 14:15'
SELECT CAST(@Date AS TIME)
我认为您想要的查询如下:
SELECT
DATEADD(MINUTE, 15 * (DATEDIFF(MINUTE, 0, [Date]) / 15), 0), -- Assuming [Date] is the DATETIME column, this will give you 15 minute intervals
AVG([Col2] - [Col3])
FROM
dbo.data
GROUP BY
DATEADD(MINUTE, 15 * (DATEDIFF(MINUTE, 0, [Date]) / 15), 0)
如果您想搜索特定的时间范围,只需在WHERE
子句中强制执行:
SELECT
AVG([Col2] - [Col3])
FROM
dbo.data
WHERE
[Date] BETWEEN '05/15/2012 14:00' AND '05/15/2012 14:30'