Проблема с time_bucket и date_trun c или объяснимая разница? - PullRequest
1 голос
/ 06 мая 2020

У меня два разных запроса с совершенно разным поведением, но я думал, что они должны быть одинаковыми. Первый дает мне то, что я хочу, второй - нет. Вы можете объяснить это?

    with base as (
    select time at time zone 'utc' as t, value as kw
    from metrics
    where site = 'IIHS-Phase2'
      and measurement = 'kw'
      and equipment = 'WattNode'
      and time at time zone 'utc' > '2020-04-1 00:00'
      and time at time zone 'utc' < '2020-05-01 00:00'
      and value > 0),
 quarter as (
         select time_bucket('15min', t) t2, avg(kw) kw
         from base
         group by 1
     )
select date_trunc('day', t2), sum(kw) * .25 kwh
from quarter
group by 1
order by 1

Результатом будет ожидаемый результат:

2020-04-03 00:00:00.000000,47.74750179624
2020-04-04 00:00:00.000000,763.0610862812115
2020-04-05 00:00:00.000000,809.9363199208758
2020-04-06 00:00:00.000000,806.3479266995703
2020-04-07 00:00:00.000000,789.4193852521148
2020-04-08 00:00:00.000000,965.5504895999275
2020-04-09 00:00:00.000000,852.1921420684275
2020-04-10 00:00:00.000000,744.5305964113129
2020-04-11 00:00:00.000000,779.511450610154

Другой запрос:

with quarter as (
    select time_bucket('15min', time at time zone 'utc') as localtime, avg(value) * .25 as kwh
    from metrics
    where site = 'IIHS-Phase2'
      and measurement = 'kw'
      and equipment = 'WattNode'
      and time at time zone 'utc' > '2020-04-1 00:00'
      and time at time zone 'utc' < '2020-05-01 00:00'
      and value > 0
    group by 1)
select date_trunc('day', localtime), sum(kwh)
from quarter

Дает совершенно другой результат :

0 years 0 mons 0 days 0 hours 0 mins 0.00 secs,22946.408690298373

Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

В вашем втором запросе используется ключевое слово localtime, которое возвращает текущее время без часового пояса . Думаю, проблема в этом. Я предлагаю либо использовать двойные кавычки, вокруг него, т.е. "localtime", либо использовать другое имя для идентификатора.

UDPATE : как упоминалось в другом ответе Дэвидк, вам также не хватает группы.

0 голосов
/ 06 мая 2020

Похоже, у вас нет group by во втором запросе?

...