2017-02-22 33 views
1

У меня есть следующая таблица в HANA:Как группа по часам в HANA

vehicle_id time       roaming_time  parking_time 
    1   Sep 01,2016 3:09:03 AM   3     9 
    2   Sep 01,2016 3:12:03 AM   6     8 
    1   Sep 01,2016 9:10:03 AM   10     6 
    4   Sep 01,2016 10:09:03 AM   9     3 
    1   Sep 01,2016 10:10:03 AM   10     10 
    4   Sep 01,2016 12:09:03 AM   3     9 

из этой информации я хотел бы знать, что это сумма времени и сумма времени парковки в роуминге за каждый час от всех транспортные средства и хотите вывод в формате:

time       roaming_time  parking_time 
____       _____________ ____________ 
2016-09-01 00:00:00    3    9 
2016-09-01 01:00:00    6    8 
2016-09-01 02:00:00    9    6 
2016-09-01 03:00:00    3    6 
2016-09-01 04:00:00    12    3 
2016-09-01 05:00:00    15    8 
2016-09-01 06:00:00    18    4 
2016-09-01 07:00:00    8    3 
2016-09-01 08:00:00    9    4 
2016-09-01 09:00:00    6    6 
2016-09-01 10:00:00    6    9 
........ 
2016-09-01 23:00:00    3    12 

Мне нужно сгруппировать следующий запрос, который дает всю сумму на час мудрым и получить ожидаемый результат:

select sum(roaming_time) as roaming_time,sum(parking_time) as parking_time from time>='2016-09-01 00:00:00' time>='2016-09-01 23:59:59' 

Я не знаю, как сделать группировку по часам в HANA. Любые помощь с благодарностью

ответ

1

Это один из способов. , , он преобразует время дату и часовой формат:

select to_varchar(time, 'YYYY-MM-DD'), hour(time), 
     sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t 
group by date(time), hour(time) 
order by to_varchar(time, 'YYYY-MM-DD'), hour(time); 
+0

Когда я выполнить запрос 'выбрать дату (время) от T' он показывает недопустимое имя function.but' выбрать часы (время) от T' отлично работает в Hana –

+0

@Lars Br. Любая идея Почему так происходит? –

+1

@Josh. , , Я думаю, что я думал о функции 'to_date()', но 'to_char()' более уместен. –

0

Другой подход заключается в преобразовании его в строку, особенно если никакие дальнейшие расчеты времени не требуется. Это может выглядеть следующим образом:

select to_varchar(time, 'DD.MM.YYYY HH24') as parking_hour , 
     sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t 
group by to_varchar(time, 'DD.MM.YYYY HH24') as parking_hour 
order byto_varchar(time, 'DD.MM.YYYY HH24') as parking_hour; 
1

Используйте пункт group by с SERIES_ROUND(). Избегайте date() и hour() и аналогичные функции данных/времени на больших наборах данных, поскольку они, как правило, медленнее.

select SERIES_ROUND(time, 'INTERVAL 1 HOUR') as time, 
     sum(roaming_time) as roaming_time, sum(parking_time) as parking_time from t 
group by SERIES_ROUND(time, 'INTERVAL 1 HOUR') 
order by SERIES_ROUND(time, 'INTERVAL 1 HOUR');