BigQuery, разница между последовательными строками связана с вопросом - PullRequest
0 голосов
/ 17 января 2020

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

Моя проблема (как показано на моем изображении), когда изменяются icao_address и flight_number (что я хочу), а затем Я хочу, чтобы строка, в которой происходит изменение (изменение icao_address и flight_number), была сброшена в ноль .

Я собираюсь сгруппировать запрос по icao_address и flight_number.

WITH
  temptable AS (
  SELECT
  date(timestamp) as flight_date,
    timestamp,
    UNIX_SECONDS(timestamp) AS timestamp_unix,
    icao_address,
    flight_number,
    LAG(UNIX_SECONDS(timestamp)) OVER (ORDER BY timestamp) AS value2
  FROM
    `table`
  WHERE
    (icao_address = '70C0C7' and flight_number = 'WY144') or (icao_address = '750467' and flight_number = 'AK1311') and 
    flight_number is not null and 
    timestamp BETWEEN '2020-01-01'
    AND '2020-01-02'),
  relation2 AS (
  SELECT
  flight_date,
    timestamp,
    timestamp_unix,
    timestamp_unix - value2 AS difference,
    icao_address,
    flight_number
  FROM
    temptable
  ) 
  select * 
  from relation2

На изображении, в строке 11, под столбцом разницы, я бы хотел, чтобы там был ноль при изменении icao_address и flight_number. Это возможно, или любой другой способ сделать это. Я пытаюсь реализовать дело, но не добиваюсь прогресса.

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

1 Ответ

1 голос
/ 17 января 2020

Я думаю, что вы хотите partition by:

LAG(UNIX_SECONDS(timestamp)) OVER (PARTITION BY icao_address, flight_number ORDER BY timestamp) AS value2

Если вы действительно хотите 0 вместо NULL, используйте форму с тремя аргументами LAG():

LAG(UNIX_SECONDS(timestamp), 1, 0) OVER (PARTITION BY icao_address, flight_number ORDER BY timestamp) AS value2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...