Вложенный SQL в Presto не разрешает имя столбца при попытке применить WHERE

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

У меня есть вложенный запрос, который возвращает следующее:

Record_Date | Mbps_IN | Mbps_OUT
YYYYMMDD HH:00 | 1234 | 1234

это должно иметь одну запись в час, но из-за проблем со сбором данных с моего маршрутизатора часто пропускаются часы или даже дни, когда данные отсутствуют. Природа счетчика является «дельтой», поэтому в других местах «сырых данных» я фиксирую дельту объема данных между предыдущими записями, которая приводит к плоской линии в течение нескольких часов, а затем к очень большим значениям данных, часто 2 -3 раза больше из-за того, что он содержит несколько часов использования по сравнению с первым часом, когда возвращался фид данных.

В конечном итоге я хотел бы найти способ сгладить / построить среднее значение из этого всплеска и заполнить недостающие часы. (но это вызов для другого дня)

В первом случае я хотел бы просто выбрать строки, в которых значение в Mbps_In меньше 1000.

Однако, когда я делаю это из метабазы ​​или соединения dbeaver напрямую с моим PrestoDB, я получаю сообщение об ошибке

Column 'results.Mbps_In' cannot be resolved {:message "line 27:7: Column 'results.Mbps_in' cannot be resolved", :errorCode 47, :errorName "COLUMN_NOT_FOUND",

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

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
nested query
) results
-- WHERE results.Mbps_In < 1000
Group By Record_Date, Order By Record_Date desc

Когда я раскомментирую предложение Where, я получаю сообщение об ошибке при попытке разрешить имя столбца. Я чувствую, что это не должно быть трудным, но я попробовал несколько вариантов и попыток ссылаться на некоторые из исходных столбцов, которые были обработаны ранее, чтобы получить эти выходные данные, но мне все еще не удается правильно ссылаться на столбец из таблицы результатов.

Любой совет или указатели будут приняты с благодарностью.

Обновлено с помощью успешного запроса:

select
          metrics_date_hour Record_Date
          ,round(sum(In_Utilisation_Mbps_Total),2) as Mbps_In
          ,round(sum(Out_Utilisation_Mbps_Total),2) as Mbps_Out
from (
nested query
) results
-- WHERE results.Mbps_In < 1000 - I didn't get this to work 
Group By Record_Date
Having (sum(In_Utilisation_Mbps_Total) <1000
Order By Record_Date desc

Всего 1 ответ


Ошибка возникает из-за того, что в вашем вложенном запросе нет столбца с именем Mbps_In. Я считаю, что вам действительно нужен пункт HAVING, а не ГДЕ. Попробуйте изменить это на это:

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
      nested query
     ) results
Group By Record_Date
Having Mbps_In<1000
Order By Record_Date desc

Если вы все еще хотите использовать предложение WHERE, вам нужно изменить имя столбца:

select
          metrics_date_hour Record_Date
          ,round(In_Utilisation_Mbps_Total,2) as Mbps_In
          ,round(Out_Utilisation_Mbps_Total,2) as Mbps_Out
from (
      nested query
     ) results
Where In_Utilisation_Mbps_Total<1000
Group By Record_Date
Order By Record_Date desc

Есть идеи?

10000