0

我在 SQL Server 中有一个包含 3 列的数据表。第一个是日期时间,第二个和第三个都是浮动的。我试图计算特定时间间隔(即每 15 分钟)之间第 2 列和第 3 列之间差异的平均值。

我设法找到以下示例

SELECT * FROM dbo.data
WHERE CAST(DateTime AS TIME) BETWEEN '14:00' and '14:30'

但我不确定现在如何根据上述查询的结果计算第二列和第三列之间的差异。我更喜欢在 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
4

1 回答 1

1

如果您只是转换日期列,因为TIME您最终会得到多个日期,我认为这不是您的意图(请参阅下面第一个查询的结果以说明我的意思)

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'
于 2012-05-15T16:40:31.920 回答