Как получить максимальное значение данных по минутам?

#python-3.x #datetime #google-bigquery

#python-3.x #дата и время #google-bigquery

Вопрос:

Я использую этот запрос

 Select
    distinct
    creation_time,
    max(total_bytes_processed) as total,
    query
    FROM `project-id.region-us.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
    where creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)AND job_type = "QUERY" 
    group by  creation_time, query
  

и я хочу получить данные за последний час и получить максимальное значение, основанное на минуте. Например, допустим, у меня есть этот образец данных:

   10 ,2020-10-19 15:50:58.108000 00:00"
  20 ,2020-10-19 15:51:25.718000 00:00"
  45, 2020-10-19 15:51:55.356000 00:00"
  50, 2020-10-19 15:52:50.269000 00:00"
  5,  2020-10-19 15:50:40.527000 00:00"
  15, 2020-10-19 15:51:08.883000 00:00"
  25, 2020-10-19 15:51:39.082000 00:00"
  47, 2020-10-19 15:52:16.587000 00:00"
  60, 2020-10-19 15:53:02.901000 00:00"
  

Как бы я мог получить максимальное значение по минутам для этих данных?

моим желаемым результатом было бы: поскольку 10 ,2020-10-19 15:50:58.108000 00:00 значение выше, чем 5, 2020-10-19 15:50:40.527000 00:00 выводится максимальное значение .

 10, 2020-10-19 15:50 

45, 2020-10-19 15:51 

50 , 2020-10-19 15:52

60, 2020-10-19 15:53
  

Ответ №1:

Ниже приведен стандартный SQL для BigQuery

 #standardSQL
select max(value) value, timestamp_trunc(ts, minute) ts
from data
group by timestamp_trunc(ts, minute)
  

Вы можете протестировать, поиграть с приведенными выше примерами данных из вашего вопроса, как в примере ниже

 #standardSQL
with data AS (
  select 10 value, timestamp '2020-10-19 15:50:58.108000 00:00' ts union all
  select 20, '2020-10-19 15:51:25.718000 00:00' union all
  select 45, '2020-10-19 15:51:55.356000 00:00' union all
  select 50, '2020-10-19 15:52:50.269000 00:00' union all
  select 5, '2020-10-19 15:50:40.527000 00:00' union all
  select 15, '2020-10-19 15:51:08.883000 00:00' union all
  select 25, '2020-10-19 15:51:39.082000 00:00' union all
  select 47, '2020-10-19 15:52:16.587000 00:00' union all
  select 60, '2020-10-19 15:53:02.901000 00:00' 
)
select max(value) value, timestamp_trunc(ts, minute) ts
from data
group by timestamp_trunc(ts, minute)  
  

с выводом

введите описание изображения здесь

Комментарии:

1. Привет, да, я пробовал это решение, оно работает, но из любопытства есть ли способ включить и секунды? . Допустим, для 51 минуты 15-го часа есть 4 метки времени, и поскольку 45 — это максимальное значение 51 минуты, могу ли я выполнить вывод 2020-10-19 15:51:55.356000 00:00 или должна быть реализована дополнительная логика

2. возможно ли с помощью этого запроса преобразовать это в ответ json непосредственно в bigquery?