2014-12-16 5 views
1

내가 MySQL의에서 테이블을 가지고 :MySQL의 - 마지막 날 삽입의 평균 % 값은

+-----------------+-------------+------+-----+---------------------+-------+ 
| Field   | Type  | Null | Key | Default    | Extra | 
+-----------------+-------------+------+-----+---------------------+-------+ 
| period_duration | datetime | NO | PRI | 0000-00-00 00:00:00 |  | 
| duration  | varchar(6) | YES |  | NULL    |  | 
| sample   | varchar(2) | YES |  | NULL    |  | 
| corner   | varchar(10) | YES |  | NULL    |  | 
| country   | varchar(60) | NO | PRI |      |  | 
| roaming_partner | varchar(60) | NO | PRI |      |  | 
| pdp_in_total | int(8)  | YES |  | NULL    |  | 
| pdp_in_ok  | int(8)  | YES |  | NULL    |  | 
| pdp_in_not_ok | int(8)  | YES |  | NULL    |  | 
| pdp_in_ok_rate | int(8)  | YES |  | NULL    |  | 
+-----------------+-------------+------+-----+---------------------+-------+ 

이 표는 시간당 새로운 삽입을 가지고 만드는 다양한 period_durationroaming_partner 당 :

+---------------------+----------+--------+----------+---------+-----------------------+--------------+-----------+---------------+----------------+ 
| period_duration  | duration | sample | corner | country | roaming_partner  | pdp_in_total | pdp_in_ok | pdp_in_not_ok | pdp_in_ok_rate | 
+---------------------+----------+--------+----------+---------+-----------------------+--------------+-----------+---------------+----------------+ 
| 2014-12-16 14:00:00 | 3600  | 1  | GPRS_OUT | USA  | Operator1    |   796 |  787 |    9 |    99 | 
| 2014-12-16 15:00:00 | 3600  | 1  | GPRS_OUT | USA  | Operator1    |   1748 |  1706 |   42 |    98 | 
| 2014-12-16 16:00:00 | 3600  | 1  | GPRS_OUT | USA  | Operator1    |   7 |   7 |    0 |   100 | 

"ok_rate"는 비율입니다.

나는이 삽입의 평균 pdp_in_ok_rate%로, 지난 24 개 삽입에서 매일 country, roaming_partnerpdp_in_ok_rate를 표시하는 SELECT을 작성해야합니다.

내 SQL 쿼리가 다음과 같이 말하고 싶습니다. "테이블의 모든 연산자에 대한 마지막 24 개 삽입의 평균 pdp_in_ok_rate입니다. 전체 테이블이 아니지만이 테이블의 마지막 테이블입니다."

누군가 나를 도울 수 있습니까?

+2

평균의 평균은별로 의미가 없습니다. 하나의 레코드에 1000 개의 삽입이 성공하고 100 % 평균이 있고 다른 레코드에 2 개의 삽입이 있고 그 중 하나의 삽입이 실패한 경우 1001/1002 = 100 % 대신 평균 (100 %, 50 %) = 75 % 99.9 %가 성공했습니다. –

+0

나는 이것을 사용하여 네트워크 모니터링 목적으로 일일 평균을 유지한다. 당신의 논리를 사용한다면, 주어진 100 %의 높은 수를 쓴 후에는 모든 낮은 비율이 감지되지 않을 것입니다. 나는 일상적인 논리를 토대로 평균을보아야합니다. – ZeldaElf

+0

부적절 할 수 있지만 여기 [같은 저자의 다른 질문] (http://stackoverflow.com/questions/27494394/mysql-select-to-retrieve-last-datetime)입니다. –

답변

0

원하는대로 할 수 있습니까?

select country, roaming_partner, avg(pd_in_ok_rate) as avgrate 
from table t 
where period_duration >= date_sub(now(), interval -1 day) 
group by country, roaming_partner; 

이것은 평균에 대한 세부 정보를 제공하지 않습니다. 세부 사항도 원한다면 이것을 하위 쿼리로 사용할 수 있습니다.

select t.*, cr.avgrate 
from table t join 
    (select country, roaming_partner, avg(pd_in_ok_rate) as avgrate 
     from table t 
     where period_duration >= date_sub(now(), interval -1 day) 
     group by country, roaming_partner 
    ) cr 
    on t.country = cr.country and t.roaming_partner = cr.roaming_partner 
where period_duration >= date_sub(now(), interval -1 day); 
+0

아니, 그렇지 않아 ... 나는 전체 테이블에 평균을 원하지 않는다. 캡처 한 곳이 마지막 날이다. 하루에 24 퍼센트를 가지고 있다고 가정하고 매일 평균을 알고 싶지만 테이블에서 값을 버리지 않고 – ZeldaElf

+0

이 쿼리를 사용하면 전체 테이블에서 평균을 얻을 수 있습니다 ... 내 소망은 마지막 것 – ZeldaElf

+0

그것은 열심히해야한다, 나는 상상한다 :/ – ZeldaElf