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
как насчет download_bytes? мне нужно их усреднять? – akunyer
добавили дополнительные вычисления для ответа –