다음과 같은 ID와 날짜를 포함하는 테이블이 있다고 가정 해 보겠습니다. 많은 행이 포함되어 있습니다.SQL Server 2008의 일련의 DateTime 열에서 평균 시간을 얻으려면 어떻게해야합니까?
해당 행에 대한 평균 TIME을 얻으려면 내 선택 쿼리가 어떻게 나타 납니까?
감사합니다,
다음과 같은 ID와 날짜를 포함하는 테이블이 있다고 가정 해 보겠습니다. 많은 행이 포함되어 있습니다.SQL Server 2008의 일련의 DateTime 열에서 평균 시간을 얻으려면 어떻게해야합니까?
해당 행에 대한 평균 TIME을 얻으려면 내 선택 쿼리가 어떻게 나타 납니까?
감사합니다,
면책 조항 :이 작업을 수행 할 수있는 훨씬 더 나은 방법이있을 수 있습니다.
참고 : - 정확한 결과
DATETIME
합리적으로 (밀리 초 +)를 산출하기 위해 나타나는 DECIMAL(18, 6)
에 캐스팅 오전 DATETIME/TIME
AVG()
기능을 사용할 수 없습니다.# 1 - 보통 날짜
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을 사용합니다.
Microsoft 제품은 날짜 및 시간 데이터 형식의 내부 표현을 노출함으로써 SQL을 사용하여 빠르거나 느슨하게 작업 한 기록을 가지고 있습니다. 데니스 리치 (Dennis Ritchie)는이를 "구현과 관련하여 부당한 불만을 품었다"고 불렀을 것이다.
이전 버전의 Microsoft Access (및 현재 버전에서도 가능)에서는 '01-Jan-2012 '에 '03-Mar-2012'날짜를 곱하여 실제 반환 값을 얻을 수 있습니다 정사각형 단위의 단위.
dbms가 "간격"데이터 형식을 지원하는 경우 평균값을 얻는 것이 쉽고 예상했던대로 수행됩니다. (SQL 서버 간격 데이터 유형을 지원하지 않습니다.) 나는 경우 추가 변환이 필요
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'은'로 datetime' (GRR) 같은 변환을하지 않는, datetime2''유형이었다 . 편집 할 것입니다. –