마구 들어온 데이터를 5분 간격으로 view를 만들고 싶습니다. 0 2 6,768

by tosswin [SQL Query] MSSQL 시간간격 평균 [2024.09.19 09:58:07]


주어진 데이터는 다음과 같습니다.
 

run_datetime read_data
2021-08-21 20:16:44.000 26.2
2021-08-21 20:17:43.000 26.1
2021-08-21 20:18:43.000 26.2
2021-08-21 20:19:43.000 26.2
2021-08-21 20:20:37.000 26.2
2021-08-21 20:21:37.000 26.2
2021-08-21 20:22:34.000 26.2
2021-08-21 20:23:34.000 26.2
2021-08-21 20:24:37.000 26.2
2021-08-21 20:25:34.000 26.2
2021-08-21 20:26:34.000 26.2
2021-08-21 20:27:34.000 26.2
2021-08-21 20:28:37.000 26.2
2021-08-21 20:29:34.000 26.2
2021-08-21 20:30:37.000 26.2
2021-08-21 20:31:34.000 26.2
2021-08-21 20:32:38.000  
2021-08-21 20:33:34.000 26.2
2021-08-21 20:34:34.000 26.2
2021-08-21 20:35:38.000  
2021-08-21 20:36:37.000 26.3
2021-08-21 20:37:35.000 26.3
2021-08-21 20:38:35.000 26.3
2021-08-21 20:39:34.000 26.3
2021-08-21 20:40:34.000 26.3
2021-08-21 20:41:34.000 26.3
2021-08-21 20:42:34.000 26.3
2021-08-21 20:43:37.000 26.3
2021-08-21 20:44:34.000 26.3
2021-08-21 20:45:34.000 26.3
2021-08-21 20:46:40.000  
2021-08-21 20:47:41.000 26.3
2021-08-21 20:48:34.000 26.3
2021-08-21 20:49:34.000 26.3
2021-08-21 20:50:34.000 26.3
2021-08-21 20:51:34.000 26.3
2021-08-21 20:52:34.000 26.3
2021-08-21 20:53:34.000 26.3
2021-08-21 20:54:34.000 26.3
2021-08-21 20:55:37.000 26.4

 

현재 run_datetime이 일정하지 않게 입력되고 있습니다.

이를 구현하기 위해 5분 간격으로 데이터를 만들고 싶습니다.

run_datetime은 2021-08-21 20:15:00, 2021-08-21 20:20:00, ....., 2021-08-21 20:55:00 으로 변경하고

해당 데이터는

2021-08-21 20:15:00 -> 2021-08-21 20:13:00 ~ 20:18:00 read_data 의 평균, 

2021-08-21 20:20:00 -> 2021-08-21 20:18:00 ~ 20:23:00 read_data 의 평균으로 나타내고 싶습니다.

 

조사를 통해 아래와 같은 쿼리문으로 하면 된다고 하여

select 
  DATEADD(minute, DATEDIFF(minute, '2000-01-01', run_datetime) / 5 * 5, '2000-01-01') AS TimeBucket, 
  AVG(read_data) AS AvgReadData 
from T 
group by DATEADD(minute, DATEDIFF(minute, '2000-01-01', run_datetime) / 5 * 5, '2000-01-01')
order by TimeBucket;

적용해보니, 

2021-08-21 20:15:00 -> 2021-08-21 20:15:00 ~ 20:20:00 read_data 의 평균으로 적용되고 있습니다.

 

아래와 같이 적용할 수 있는 쿼리를 어떻게 수정해야 되는 지 문의드립나다.

2021-08-21 20:15:00 -> 2021-08-21 20:13:00 ~ 20:18:00 read_data 의 평균 데이터 

 

감사합니다.

 
by 마농 [2024.09.19 10:39:23]
-- 2분 더해주세요.
-- 변경전 : DATEADD(minute,  DATEDIFF(minute, '2000-01-01', run_datetime)      / 5 * 5, '2000-01-01') AS TimeBucket
-- 변경후 : DATEADD(minute, (DATEDIFF(minute, '2000-01-01', run_datetime) + 2) / 5 * 5, '2000-01-01') AS TimeBucket

 


by tosswin [2024.09.19 11:18:02]

감사합니다. 마농님.

덕분에 속이 시원해졌습니다.

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