【问题标题】:BigQuery, difference between consecutive rows related questionBigQuery,连续行相关问题之间的区别
【发布时间】:2020-01-17 09:48:18
【问题描述】:

我很难找出正确的问题,但我有以下查询,我已经能够得到连续行之间的差异。

我的问题是(如图所示)当 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 的变化,我希望那里有一个零。这是可能的,或任何其他方式来做到这一点。我正在尝试执行一个案例,但没有取得任何进展。

enter image description here

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    我想你想要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
    

    【讨论】:

    • 嗨,戈登,感谢您帮助我。我不知道分区,但它可以工作,并且会更多地阅读它以更好地理解它!
    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2019-08-01
    相关资源
    最近更新 更多