Я бы упростил / оптимизировал ваши запросы следующим образом:
SELECT
toDate(max_tps_time) AS date_date,
toTimeZone(toStartOfMinute(utc_date_time), 'Asia/Dubai') AS max_tps_time,
count() AS max_tps
FROM
( /* test data */
SELECT arrayJoin([
toDateTime('2019-11-19 07:37:01', 'UTC'), toDateTime('2019-11-19 07:37:11', 'UTC'), toDateTime('2019-11-19 07:37:21', 'UTC'), toDateTime('2019-11-19 07:37:31', 'UTC'),
toDateTime('2019-11-18 08:15:21', 'UTC'), toDateTime('2019-11-18 08:15:42', 'UTC'),
toDateTime('2019-11-19 07:40:01', 'UTC'), toDateTime('2019-11-19 07:40:11', 'UTC'), toDateTime('2019-11-19 07:40:21', 'UTC'), toDateTime('2019-11-19 07:40:31', 'UTC'), toDateTime('2019-11-19 07:40:41', 'UTC'),
toDateTime('2019-11-18 08:40:18', 'UTC'), toDateTime('2019-11-18 08:40:20', 'UTC'), toDateTime('2019-11-18 08:40:22', 'UTC'), toDateTime('2019-11-18 08:40:24', 'UTC'), toDateTime('2019-11-18 08:40:26', 'UTC'), toDateTime('2019-11-18 08:40:28', 'UTC')]) AS utc_date_time
)
GROUP BY max_tps_time
ORDER BY max_tps_time;
/* result
┌──date_date─┬────────max_tps_time─┬─max_tps─┐
│ 2019-11-18 │ 2019-11-18 12:15:00 │ 2 │
│ 2019-11-18 │ 2019-11-18 12:40:00 │ 6 │
│ 2019-11-19 │ 2019-11-19 11:37:00 │ 4 │
│ 2019-11-19 │ 2019-11-19 11:40:00 │ 5 │
└────────────┴─────────────────────┴─────────┘
*/
SELECT
toDate(max_tps_time) AS date_date,
argMax(max_tps_time, max_tps) max_tps_time_by_day,
max(max_tps) max_tps_by_day
FROM (
SELECT
toTimeZone(toStartOfMinute(utc_date_time), 'Asia/Dubai') AS max_tps_time,
count() AS max_tps
FROM
( /* test data */
SELECT arrayJoin([
toDateTime('2019-11-19 07:37:01', 'UTC'), toDateTime('2019-11-19 07:37:11', 'UTC'), toDateTime('2019-11-19 07:37:21', 'UTC'), toDateTime('2019-11-19 07:37:31', 'UTC'),
toDateTime('2019-11-18 08:15:21', 'UTC'), toDateTime('2019-11-18 08:15:42', 'UTC'),
toDateTime('2019-11-19 07:40:01', 'UTC'), toDateTime('2019-11-19 07:40:11', 'UTC'), toDateTime('2019-11-19 07:40:21', 'UTC'), toDateTime('2019-11-19 07:40:31', 'UTC'), toDateTime('2019-11-19 07:40:41', 'UTC'),
toDateTime('2019-11-18 08:40:18', 'UTC'), toDateTime('2019-11-18 08:40:20', 'UTC'), toDateTime('2019-11-18 08:40:22', 'UTC'), toDateTime('2019-11-18 08:40:24', 'UTC'), toDateTime('2019-11-18 08:40:26', 'UTC'), toDateTime('2019-11-18 08:40:28', 'UTC')]) AS utc_date_time
)
GROUP BY max_tps_time)
GROUP BY date_date
ORDER BY date_date;
/* result
┌──date_date─┬─max_tps_time_by_day─┬─max_tps_by_day─┐
│ 2019-11-18 │ 2019-11-18 12:40:00 │ 6 │
│ 2019-11-19 │ 2019-11-19 11:40:00 │ 5 │
└────────────┴─────────────────────┴────────────────┘
*/
Эти запросы можно объединить в один запрос с помощью ROLLUP . Результат будет содержать два промежуточных результата для «ежедневных» и «минутных» агрегатов:
SELECT
toDate(max_tps_time) AS date_date,
argMax(max_tps_time, max_tps) max_tps_time_by_day,
max(max_tps) max_tps_by_day,
toInt32(max_tps_time) = 0 ? 1 : 0 is_daily_aggregate
FROM (
SELECT
toTimeZone(toStartOfMinute(utc_date_time), 'Asia/Dubai') AS max_tps_time,
count() AS max_tps
FROM
( /* test data */
SELECT arrayJoin([
toDateTime('2019-11-19 07:37:01', 'UTC'), toDateTime('2019-11-19 07:37:11', 'UTC'), toDateTime('2019-11-19 07:37:21', 'UTC'), toDateTime('2019-11-19 07:37:31', 'UTC'),
toDateTime('2019-11-18 08:15:21', 'UTC'), toDateTime('2019-11-18 08:15:42', 'UTC'),
toDateTime('2019-11-19 07:40:01', 'UTC'), toDateTime('2019-11-19 07:40:11', 'UTC'), toDateTime('2019-11-19 07:40:21', 'UTC'), toDateTime('2019-11-19 07:40:31', 'UTC'), toDateTime('2019-11-19 07:40:41', 'UTC'),
toDateTime('2019-11-18 08:40:18', 'UTC'), toDateTime('2019-11-18 08:40:20', 'UTC'), toDateTime('2019-11-18 08:40:22', 'UTC'), toDateTime('2019-11-18 08:40:24', 'UTC'), toDateTime('2019-11-18 08:40:26', 'UTC'), toDateTime('2019-11-18 08:40:28', 'UTC')]) AS utc_date_time
)
GROUP BY max_tps_time)
GROUP BY date_date, max_tps_time WITH ROLLUP
HAVING toInt32(date_date) != 0
ORDER BY max_tps_time, max_tps_time_by_day;
/* result
┌──date_date─┬─max_tps_time_by_day─┬─max_tps_by_day─┬─is_daily_aggregate─┐
│ 2019-11-18 │ 2019-11-18 12:40:00 │ 6 │ 1 │<-- daily aggregate
│ 2019-11-19 │ 2019-11-19 11:40:00 │ 5 │ 1 │<-- daily aggregate
│ 2019-11-18 │ 2019-11-18 12:15:00 │ 2 │ 0 │<-- minute aggregate
│ 2019-11-18 │ 2019-11-18 12:40:00 │ 6 │ 0 │<-- minute aggregate
│ 2019-11-19 │ 2019-11-19 11:37:00 │ 4 │ 0 │<-- minute aggregate
│ 2019-11-19 │ 2019-11-19 11:40:00 │ 5 │ 0 │<-- minute aggregate
└────────────┴─────────────────────┴────────────────┴────────────────────┘
*/