2016-11-12 4 views
0

У меня возникли проблемы с получением среднего значения в минутах из образца записи, как указано в стандарте SQL или Impala SQL стандарта ANSI-92.SQL для вычисления средней загрузки за считанные минуты

время, которое является жирным шрифтом доли времени пространство (в минутах группы) для starttimestamp и stoptimestamp. Как получить среднюю загрузку в

  • 00:00:00 минут (00:00:20 - 00:00:28)
  • 00:01:00 минут (00:01:13 - 00:01:21)
  • 00:02:00 минут (00:02:34 - 00:02:43)

и так далее.

Любое предложение? Заранее большое спасибо!

С уважением,

Pozy

ответ

1
select 
    (unix_timestamp(stoptimestamp)-unix_timestamp(starttimestamp))/60.0 diff_minutes 
from your_table 

с использованием UNIX_TIMESTAMP() вычисляет разность в секундах затем разделить на 60 или 60,0 в зависимости от точности вы хотите в результате.

Чтобы вычислить среднюю загрузку по нескольким строкам, вам необходимо использовать SUM() для агрегирования байтов и единиц измерения времени. Вы можете использовать секунды для этого щёток расчета, а затем разделить на 60,0

Следующий пример написан для SQL Sever, как я не Impala использовать

declare @mytable table 
    ([login_id] varchar(11), [starttimestamp_] datetime, [stoptimestamp_] datetime, [download_bytes] decimal(12,1)) 
; 

INSERT INTO @mytable 
    ([login_id], [starttimestamp_], [stoptimestamp_], [download_bytes]) 
VALUES 
    ('[email protected]', '2015-12-31 23:59:50', '2016-01-01 00:00:20', 438.0), 
    ('[email protected]', '2016-01-01 00:00:28', '2016-01-01 00:01:13', 2190.0), 
    ('[email protected]', '2016-01-01 00:01:21', '2016-01-01 00:01:54', 876.0), 
    ('[email protected]', '2016-01-01 00:01:59', '2016-01-01 00:02:34', 1168.0), 
    ('[email protected]', '2016-01-01 00:02:43', '2016-01-01 00:03:34', 1179.0) 
; 

select 
    sum(download_bytes) sum_bytes 
, sum(datediff(second,starttimestamp_,stoptimestamp_)) sum_time_unit 
, sum(download_bytes)/sum(datediff(second,starttimestamp_,stoptimestamp_)) avg_bytes_sec 
, (sum(download_bytes)/sum(datediff(second,starttimestamp_,stoptimestamp_)))/60.0 avg_bytes_min 
from @mytable 
-- WHERE ... 
-- GROUP BY ... 

+===========+===============+===============+===============+ 
| sum_bytes | sum_time_unit | avg_bytes_sec | avg_bytes_min | 
+===========+===============+===============+===============+ 
| 5851  | 194   | 30.159793  | 0.502663  | 
+-----------+---------------+---------------+---------------+ 

см: http://data.stackexchange.com/stackoverflow/query/576857/sql-to-calculate-average-download-in-minutes

+0

как насчет download_bytes? мне нужно их усреднять? – akunyer

+0

добавили дополнительные вычисления для ответа –

Смежные вопросы