Как вернуть нулевое значение из счетчика без строк

Вот мой запрос ниже, который дает количество и группу по каждому часу

SELECT ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time)) as time , to_integer(to_varchar(start_time, 'DD')) as day , count(*) as count FROM SYSTEM.TABLE where start_time >= '2016-01-01 00:00:00' and start_time <= '2016-01-01 23:59:59'  and place_id=1 group by ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time)),to_integer(to_varchar(start_time, 'DD')) 
order by ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time))

Но в период с 23:00 до 12:00 я не считаю. Поэтому вместо того, чтобы не возвращать строку, я хочу, чтобы она возвращала значение с 0. Таким образом, когда я прошел поиск, я обнаружил, что COALESCE может помочь, поэтому я попробовал с

SELECT COALESCE (( SELECT ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time)) as time , to_integer(to_varchar(start_time, 'DD')) as day , count(*) as count FROM SYSTEM.TABLE where start_time >= '2016-01-01 00:00:00' and start_time <= '2016-01-01 23:59:59'  and place_id=1 group by ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time)),to_integer(to_varchar(start_time, 'DD')) 
    order by ADD_SECONDS(start_time,- MINUTE(start_time) * 60  - SECOND(start_time))
), 0);

Но это не сработало. Любая помощь приветствуется.

1 ответ

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

SAP HANA предоставляет общий доступ по умолчанию. таблицы, которые можно использовать для этой цели (эти таблицы также облегчают преобразование даты / времени посредством поиска): M_TIME_DIMENSION.... SAP HANA Docu M_TIME_DIMENSION

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

Другие вопросы по тегам