BigQuery, как ссылаться на значение поля из предыдущей записи при сортировке ключей нескольких полей - PullRequest
0 голосов
/ 18 марта 2020

BigQuery newb ie вопрос ...

У меня есть таблица BigQuery, например ....

EventTimestamp (timestamp)
PersonId (int)
Asset (string)
Frequency (string)
Format (string)
Value (int)
Changed (boolean)

Если я сортирую записи по ...

eventTimestamp asc, PersonId,Asset,Frequency,Format

Я хочу установить значение «измененного» поля в «true», используя следующие логики c ...

if current record/personid = previous record/personid 
AND 
current record/asset = previous record/asset
and
current record/frequency = previous record/frequency
and
current record/format = previous record/format then
   if current record/value <> previous record/value then
      changed = true
   else
      changed = false
else
   changed = true
end

Любые предложения о том, как создать BigQuery SQL заявление на доставку это?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT *, 
  Value != IFNULL(LAG(Value) OVER(PARTITION BY PersonId, Asset, Frequency, `Format` ORDER BY eventTimestamp), -Value) changed
FROM `project.dataset.table`
0 голосов
/ 19 марта 2020

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

Для ссылки предыдущие записи, используйте оконную функцию LAG():

SELECT FlightDAte, Reporting_Airline, Origin, Dest, Tail_Number
  , ActualElapsedTime
  , LAG(ActualElapsedTime) 
    OVER(PARTITION BY Tail_Number 
      ORDER BY Reporting_Airline DESC, year, month, FlightDate) previous_row
FROM `fh-bigquery.flights.ontime_201908`
WHERE DATE_TRUNC(FlightDate, MONTH) = "2018-03-01"
AND Reporting_Airline = 'UA'
LIMIT 100

enter image description here

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

  ActualElapsedTime = LAG(ActualElapsedTime) OVER(
      PARTITION BY Tail_Number 
      ORDER BY Reporting_Airline DESC, year, month, FlightDate) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...