У меня есть следующие SQL запрос с использованием PrestoDB:сумма составляет использование в течение каждого часа в день в течение всего дня в месяц
SELECT
date_trunc('month',TimeFrom) AS Month,
date_trunc('hour',TimeFrom) AS HourFrom,
date_trunc('hour',TimeTo) AS HourTo,
CASE
WHEN resource = 'c81d9eb67e93' THEN 'S'
WHEN resource = 'cce1eee4c73f' THEN 'L'
WHEN resource = 'fbc1d63e0f15' THEN 'G'
WHEN resource = '5ef75e433db2' THEN 'Q'
WHEN resource = '4b6ba65cbe14' THEN 'T'
WHEN resource = 'df0a8b60467d' THEN 'R'
WHEN resource = '013472b63651' THEN 'C'
WHEN resource = '7464b77d93be' THEN 'F'
WHEN resource = '6f1186bdbc12' THEN 'M'
ELSE 'other resource'
END AS Resource,
COUNT (*) AS Utilization
FROM (SELECT
resource,
date_add('hour', i - 1, mytable.TimeFrom) AS TimeFrom,
date_add('hour', i, mytable.TimeFrom) AS TimeTo
FROM (SELECT 1 AS i UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16
UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20
UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24
) AS numbers
INNER JOIN (SELECT
resource,
date_trunc(
'hour',
FROM_UNIXTIME(timefrom)
) AS TimeFrom,
date_trunc(
'hour',
(FROM_UNIXTIME(timeto) + interval '45' minute)
) AS TimeTo
FROM
reservation
WHERE
type = 'create'
ORDER BY
date_trunc(
'day',
FROM_UNIXTIME(timefrom)
),
resource) AS mytable ON numbers.i <= date_diff('hour', TimeFrom, TimeTo)
ORDER BY
TimeFrom,
resource)
GROUP BY
date_trunc('month',TimeFrom),
date_trunc('hour',TimeFrom),
date_trunc('hour',TimeTo),
resource
Он возвращает таблицу, как так:
Month | HourFrom | HourTo | Resource | Utilization
["2015-08-01 00:00:00.000","2015-08-05 14:00:00.000","2015-08-05 15:00:00.000","S",4]
["2015-08-01 00:00:00.000","2015-08-05 17:00:00.000","2015-08-05 18:00:00.000","Q",1]
["2015-08-01 00:00:00.000","2015-08-05 17:00:00.000","2015-08-05 18:00:00.000","Q",1]
["2015-08-01 00:00:00.000","2015-08-05 18:00:00.000","2015-08-05 19:00:00.000","S",5]
["2015-08-01 00:00:00.000","2015-08-05 20:00:00.000","2015-08-05 21:00:00.000","Q",1]
["2015-08-01 00:00:00.000","2015-08-05 21:00:00.000","2015-08-05 22:00:00.000","Q",1]
["2015-08-01 00:00:00.000","2015-08-05 22:00:00.000","2015-08-05 23:00:00.000","Q",1]
["2015-08-01 00:00:00.000","2015-08-06 00:00:00.000","2015-08-06 01:00:00.000","L",2]
["2015-08-01 00:00:00.000","2015-08-06 00:00:00.000","2015-08-06 01:00:00.000","Q",2]
["2015-08-01 00:00:00.000","2015-08-06 02:00:00.000","2015-08-06 03:00:00.000","S",3]
Как вы можете видеть Столбцы HourFrom и HourTo разделяются по дням. Есть ли способ объединить их, чтобы у меня была сумма/общее количество каждого часа в течение всех дней в месяце?
Итак, у меня есть данные за январь & Февраль, и мы открыты только с 1 AM-4AM, и есть только 2 ресурса, тогда финальная таблица, которую я хотел бы получить, будет выглядеть примерно так (т.е. Jan1AM - Jan2AM дает мне число использования [всего] для всех дней, в течение этого периода времени в январе в одной строке):
Month | HourFrom | HourTo | Resource | Utilization
Jan Jan 1AM Jan 2AM S number
Jan Jan 1AM Jan 2AM X number
Jan Jan 2AM Jan 3AM S number
Jan Jan 2AM Jan 3AM X number
Jan Jan 3AM Jan 4AM S number
Jan Jan 3AM Jan 4AM X number
Feb Feb 1AM Feb 2AM S number
Feb Feb 1AM Feb 2AM X number
Feb Feb 2AM Feb 3AM S number
Feb Feb 2AM Feb 3AM X number
Feb Feb 3AM Feb 4AM S number
Feb Feb 3AM Feb 4AM X number
Как бы я изменить свой первоначальный запрос, чтобы сделать что-то вроде этого?