可以說我有一個表,其中包含以下 - id和日期(只是爲了保持簡單)。 它包含許多行。如何從SQL Server 2008中的一系列DateTime列中獲取平均時間?
我的選擇查詢看起來像什麼來獲得這些行的平均時間?
感謝,
可以說我有一個表,其中包含以下 - id和日期(只是爲了保持簡單)。 它包含許多行。如何從SQL Server 2008中的一系列DateTime列中獲取平均時間?
我的選擇查詢看起來像什麼來獲得這些行的平均時間?
感謝,
免責聲明:可能有很多更好的方式來做到這一點。
注:
AVG()
功能對一個DATETIME/TIME
DATETIME
到DECIMAL(18, 6)
這似乎得到一個合理的(+ - 幾毫秒)精確的結果。#1 - Average日期
SELECT
CAST(AVG(CAST(TimeOfInterest AS DECIMAL(18, 6))) AS DATETIME)
FROM dbo.MyTable;
#2 - 的平均時間 - 刪除日期部分,鑄造,然後平均
SELECT
CAST(AVG(CAST(TimeOfInterest - CAST(TimeOfInterest AS DATE) AS DECIMAL(18, 6))) AS DATETIME)
FROM dbo.MyTable;
第二個例子中減去日期部分DATETIME
從它本身,只留下時間部分,然後將其轉換爲十進制進行平均,並返回到012用於格式化的。您需要刪除日期部分(這是毫無意義的),時間部分應該表示集合中的平均時間。
SELECT CAST(AVG(CAST(ReadingDate AS real) - FLOOR(CAST(ReadingDate as real))) AS datetime)
FROM Rbh
我知道,在至少一些的SQL標準,值表達式(參數到AVG()函數)不允許是日期時間值或字符串值。我沒有閱讀過所有的SQL標準,但是如果多年來這個限制已經放鬆,我會感到驚訝。
部分原因是,這是因爲'n'值的「平均值」(或算術平均值)被定義爲值除以'n'的總和。而'01-Jan-2012 08:00'+ '03 -Mar-2012 07:53'的表達沒有任何意義。 '01 -Jan-2012 08:00'/ 3
微軟公司的產品通過暴露他們的日期和時間數據類型的內部表示方式,使得SQL有了快速和鬆散的歷史。丹尼斯·裏奇會稱這是「實施過程中毫無道理的狡猾。」
在早期版本的Microsoft Access中(也可能在當前版本中),可以將日期'01-Jan-2012'乘以日期'03 -Mar-2012'並獲得實際返回值,據推測以方形日期爲單位。
如果你的dbms支持「間隔」數據類型,那麼取平均值就很簡單,並且你所期望的是。 (SQL Server不支持間隔數據類型。)
create table test (
n interval hour to minute
);
insert into test values
('1:00'),
('1:30'),
('2:00');
select avg(n)
from test;
avg (interval)
--
01:30:00
我需要額外的轉換的情況下,'TimeOfInterest'是類型的'datetime2',它不具有相同的轉化爲'datetime'(GRR) 。將編輯。 – 2015-08-17 13:43:57