반응형
SQL 선택 3시간 평균
이 테이블이 있어요
MariaDB [table]>
select insert_time, host_id, tx
from host_daily
where host_id = 2
order by insert_time desc
limit 24;
+---------------------+---------+------------+
| insert_time | host_id | tx |
+---------------------+---------+------------+
| 2016-02-06 14:00:00 | 2 | 9676875156 |
| 2016-02-06 13:00:00 | 2 | 9671544048 |
| 2016-02-06 12:00:00 | 2 | 9669464371 |
| 2016-02-06 11:00:00 | 2 | 9667087098 |
| 2016-02-06 10:00:00 | 2 | 9665014071 |
| 2016-02-06 09:00:00 | 2 | 9662931956 |
| 2016-02-06 08:00:00 | 2 | 9660874138 |
| 2016-02-06 07:00:00 | 2 | 9658624162 |
| 2016-02-06 06:00:00 | 2 | 9656555329 |
| 2016-02-06 05:00:00 | 2 | 9654443169 |
| 2016-02-06 04:00:00 | 2 | 9651362676 |
| 2016-02-06 03:00:00 | 2 | 9648531733 |
| 2016-02-06 02:00:00 | 2 | 9633368883 |
| 2016-02-05 23:00:00 | 2 | 9464826179 |
| 2016-02-05 22:00:00 | 2 | 9363099844 |
| 2016-02-05 21:00:00 | 2 | 9270841166 |
| 2016-02-05 20:00:00 | 2 | 9140988502 |
| 2016-02-05 19:00:00 | 2 | 9022460285 |
| 2016-02-05 18:00:00 | 2 | 8925920799 |
| 2016-02-05 17:00:00 | 2 | 8825711136 |
| 2016-02-05 16:00:00 | 2 | 8802081092 |
| 2016-02-05 15:00:00 | 2 | 8755784419 |
+---------------------+---------+------------+
확실하진 않지만, 몇 시간이 부족할 수도 있어요.예: 23시에서 2시 사이.가능하다면 이 누락된 시간을 0으로 채우고 싶습니다.이제 지난 주의 평균 3시간을 선택하고 싶은데, 조회가 제대로 되지 않는 것 같습니다.잠시 이 쿼리를 수정하려고 합니다.
select
n.n as id,
host_id,
avg(tx),
insert_time + interval 3 * n.n hour as 'from',
insert_time + interval 3 * (n.n + 1) hour as 'to'
from (SELECT 0 AS n
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15
UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18
UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21
UNION ALL SELECT 22 UNION ALL SELECT 23
) n
left join host_daily
on n.n = hour(insert_time) div 3
where host_id = 2
and insert_time > NOW() - INTERVAL 24 HOUR group by n.n;
결과:
+----+---------+-----------------+---------------------+---------------------+
| id | host_id | avg(tx) | from | to |
+----+---------+-----------------+---------------------+---------------------+
| 4 | 2 | 9672627858.3333 | 2016-02-07 00:00:00 | 2016-02-07 03:00:00 |
| 3 | 2 | 9665011041.6667 | 2016-02-06 18:00:00 | 2016-02-06 21:00:00 |
| 2 | 2 | 9658684543.0000 | 2016-02-06 12:00:00 | 2016-02-06 15:00:00 |
| 1 | 2 | 9651445859.3333 | 2016-02-06 06:00:00 | 2016-02-06 09:00:00 |
| 0 | 2 | 9605672722.3333 | 2016-02-06 00:00:00 | 2016-02-06 03:00:00 |
| 7 | 2 | 9366255729.6667 | 2016-02-06 18:00:00 | 2016-02-06 21:00:00 |
| 6 | 2 | 9029789862.0000 | 2016-02-06 12:00:00 | 2016-02-06 15:00:00 |
| 5 | 2 | 9019970953.0000 | 2016-02-06 06:00:00 | 2016-02-06 09:00:00 |
+----+---------+-----------------+---------------------+---------------------+
누가 나를 올바른 방향으로 인도해 줄 수 있을까?
편집: 쿼리 결과를 예상 결과로 편집하여 24시간 보기에서 복귀함으로써 예제 무결성을 유지합니다.
매회 반올림을 3시간으로 줄여야 합니다.매 3시간마다 레코드가 하나 이상 있다고 가정하면 반올림을 사용할 수 있습니다.
select from_unixtime(floor(unix_timestamp(insert_time)/(60*60*3))*60*60*3) as timestart,
host_id,
sum(tx) / 3
from host_daily hd
group by from_unixtime(floor(unix_timestamp(insert_time)/(60*60*3))*60*60*3), hostid
order by 1, 2;
이러한 종류의 가정에서는 결측값이 0으로 처리되는 것을 전제로 합니다.사용할 수 없는 경우는, 을 사용합니다.avg(tx)
대신.
그래도 행이 누락된 경우 모든 데이터가 누락된 기간에 원하는 값을 사용하여 행에 추가할 수 있습니다.당신의 질문은 그 경우에 무엇을 포함시켜야 하는지에 대해 모호합니다.
언급URL : https://stackoverflow.com/questions/35241254/sql-select-3-hour-avg
반응형
'source' 카테고리의 다른 글
AngularJS : 컨트롤러 기능에서 뷰를 전환하려면 어떻게 해야 합니까? (0) | 2022.12.25 |
---|---|
"elseif"와 "else if"는 완전히 동의어입니까? (0) | 2022.12.25 |
JSON 배열에 대한 JSON 함수를 사용하여 레코드 필터링 (0) | 2022.12.25 |
도커 워드프레스 컨테이너가 데이터베이스 컨테이너에 연결할 수 없음 (0) | 2022.12.25 |
PHP의 배열에서 특정 값의 인덱스를 가져옵니다. (0) | 2022.12.05 |