特定时间间隔的两列之间的差异

时间:2012-05-15 16:30:18

标签: sql-server sql-server-2008 tsql c#-4.0

我在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

1 个答案:

答案 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'
相关问题