mssql 부분 평균값에 대해서 질문하겠습니다! 0 1 1,141

by 김성진 [SQLServer] mssql 평균값 부분 [2021.07.01 20:14:59]


현재 시간단위로 들어온 데이터를 각각 평균값을 내야하는 상황인데 도저히 생각이 나질않아서 질문 드립니다!

 

날짜              시간               데이터

2021/07/01  10:01   1       1      1
2021/07/01  10:02   1       1      1
2021/07/01  10:03   1       1      1
2021/07/01  10:04   1       1      1
2021/07/01  10:05   1       1      1
2021/07/01  10:06   1       1      1
2021/07/01  10:07   1       1      1
2021/07/01  10:08   1       1      1
2021/07/01  10:09   1       1      1
2021/07/01  10:10   1       1      1
2021/07/01  10:11   1       1      1
2021/07/01  10:12   1       1      1

예를들어 이렇게  날짜 시간 데이터가 있다고 하면
전체 시간의 평균이 아닌 부분별로  1~3분까지를  3분데이터 평균   3~6분까지를 6분데이터 평균 6~9분까지를 9분데이터 평균 값으로 나타내고 싶은데

avg 함수를 사용하여 평균을 낸다면 시간 컬럼의 전체 값의 평균을 내서 어떤식으로 응용을 해야할지 감이 잡히지 않습니다 ㅠㅠ 도움 주시면 감사하겠습니다!

선배님들께 여쭙습니다! 감사합니다

by 마농 [2021.07.02 10:52:03]
WITH t AS
(
SELECT '2021/07/01' dt, '09:59' tm, 1 v1, 1 v2, 1 v3   --> 2021/07/01 10:00
UNION ALL SELECT '2021/07/01', '10:00', 1, 1, 1        --> 2021/07/01 10:00
UNION ALL SELECT '2021/07/01', '10:01', 1, 1, 1        --> 2021/07/01 10:03
UNION ALL SELECT '2021/07/01', '10:02', 1, 1, 1        --> 2021/07/01 10:03
UNION ALL SELECT '2021/07/01', '10:03', 1, 1, 1        --> 2021/07/01 10:03
UNION ALL SELECT '2021/07/01', '10:04', 1, 1, 1        --> 2021/07/01 10:06
UNION ALL SELECT '2021/07/01', '10:05', 1, 1, 1        --> 2021/07/01 10:06
UNION ALL SELECT '2021/07/01', '10:06', 1, 1, 1        --> 2021/07/01 10:06
UNION ALL SELECT '2021/07/01', '10:07', 1, 1, 1        --> 2021/07/01 10:09
UNION ALL SELECT '2021/07/01', '10:08', 1, 1, 1        --> 2021/07/01 10:09
UNION ALL SELECT '2021/07/01', '10:09', 1, 1, 1        --> 2021/07/01 10:09
UNION ALL SELECT '2021/07/01', '10:10', 1, 1, 1        --> 2021/07/01 10:12
UNION ALL SELECT '2021/07/01', '10:11', 1, 1, 1        --> 2021/07/01 10:12
UNION ALL SELECT '2021/07/01', '10:12', 1, 1, 1        --> 2021/07/01 10:12
UNION ALL SELECT '2021/07/01', '23:57', 1, 1, 1        --> 2021/07/01 23:57
UNION ALL SELECT '2021/07/01', '23:58', 1, 1, 1        --> 2021/07/02 00:00
UNION ALL SELECT '2021/07/01', '23:59', 1, 1, 1        --> 2021/07/02 00:00
)
SELECT dttm
     , CONVERT(VARCHAR(10), dttm, 111) dt
     , CONVERT(VARCHAR( 5), dttm, 108) tm
     , AVG(v1) v1
     , AVG(v2) v2
     , AVG(v3) v3
     , COUNT(*) cnt
  FROM (SELECT dt, tm
             , v1, v2, v3
             , DATEADD(mi, (LEFT(tm, 2) * 60 + RIGHT(tm, 2) + 2) / 3 * 3, dt) dttm
          FROM t
        ) a
 GROUP BY dttm
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입