id | time | date | hour | minute | sleep |
TEST1 | 2014-12-08 13:24 | 2014-12-08 | 13 | 24 | 0 |
TEST1 | 2014-12-08 13:25 | 2014-12-08 | 13 | 25 | 0 |
TEST1 | 2014-12-08 13:26 | 2014-12-08 | 13 | 26 | 0 |
TEST1 | 2014-12-08 13:27 | 2014-12-08 | 13 | 27 | 0 |
TEST1 | 2014-12-08 13:28 | 2014-12-08 | 13 | 28 | 0 |
TEST1 | 2014-12-08 13:29 | 2014-12-08 | 13 | 29 | 0 |
TEST1 | 2014-12-08 13:30 | 2014-12-08 | 13 | 30 | 0 |
TEST1 | 2014-12-08 13:31 | 2014-12-08 | 13 | 31 | 0 |
TEST1 | 2014-12-08 13:32 | 2014-12-08 | 13 | 32 | 0 |
TEST1 | 2014-12-08 13:33 | 2014-12-08 | 13 | 33 | 0 |
TEST1 | 2014-12-08 13:34 | 2014-12-08 | 13 | 34 | 0 |
TEST1 | 2014-12-08 13:35 | 2014-12-08 | 13 | 35 | 0 |
TEST1 | 2014-12-08 13:36 | 2014-12-08 | 13 | 36 | 0 |
TEST1 | 2014-12-08 13:37 | 2014-12-08 | 13 | 37 | 0 |
TEST1 | 2014-12-08 13:38 | 2014-12-08 | 13 | 38 | 0 |
TEST1 | 2014-12-08 13:39 | 2014-12-08 | 13 | 39 | 0 |
TEST1 | 2014-12-08 13:40 | 2014-12-08 | 13 | 40 | 0 |
TEST1 | 2014-12-08 13:41 | 2014-12-08 | 13 | 41 | 0 |
위와 같은 데이터가 있을 경우(시계열 자료) 해당 자료의 ID별로 10분당 sleep 을 카운트하고자 합니다.
즉 TEST1 아이디의 2014-12-08일 13:00 ~ 13:09분, 13:10 ~ 13:19, 13:20 ~ 13:29 .... 이렇게 시간별로 10분당 구간에 해당하는 sleep 을 카운트 하고자 할 때 어떤 형식으로 접근을 해야될지 모르겠습니다.
쿼리문으로 알려주시는 것보다는 "이런 형식으로 접근해야 될 것 같다"라는 로직 위주로 알려주시면 직접 해보도록 하겠습니다. 감사합니다.
SELECT id , currentdate , date , hour , count(sleep) as Sleep_count_ten_intervals FROM t WHERE sleep = 1 GROUP BY DATEPART(YEAR, time) , DATEPART(MONTH, time) , DATEPART(DAY, time) , DATEPART(HOUR, time) , (DATEPART(MINUTE, time) / 10) , id , currentdate , date , hour ORDER BY id, date, hour, currentdate
창조의날개님과 jkson 님께서 말씀해주신 방법은 감을 못 잡고 있어서 다른 방법으로 시도해봤습니다. 위 쿼리문으로 할 경우 아래의 테이블처럼 값이 나옵니다. 이 부분에서 sleep 이 계산된 시작분 ~ 종료 분을 따로 집어넣으려면 어떻게 해야될까요?
id | currentdate | date | hour | Sleep_count_ten_intervals |
test | 2 | 2014-12-09 | 0 | 4 |
test | 2 | 2014-12-09 | 1 | 10 |
test | 2 | 2014-12-09 | 1 | 7 |
test | 2 | 2014-12-09 | 1 | 10 |
test | 2 | 2014-12-09 | 1 | 10 |
test | 2 | 2014-12-09 | 1 | 10 |
test | 2 | 2014-12-09 | 1 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
test | 2 | 2014-12-09 | 2 | 10 |
또한, 창조의날개님과 jkson님께서 확인하신다면 조금만 더 힌트를 부탁드려도 될까요?
창조의날개님께서 말씀해주신 방법으로 하기 전에 jkson 님께서 말씀해주신 분단위로 바꾸는 방법을 먼저 수행한 다음에 해야되는 것 같은데... 어떤 로직인지 감이 잘 안 잡히네요.
-- 작성하신 쿼리를 보면 이미 테이블 내에 -- date, hour, minute 항목을 따로 가지고 있는듯 한데요? -- 그렇다면 굳이 time 항목을 DATEPART 로 다시 계산할 필요가 없을 듯 하네요. SELECT id , currentdate , date , hour , minute / 10 * 10 AS minute_from , minute / 10 * 10 + 9 AS minute_to , COUNT(*) AS sleep FROM t GROUP BY id , currentdate , date , hour , minute / 10 * 10 ;