Получить последний раз, когда значение изменилось в Google BigQuery - PullRequest
0 голосов
/ 02 июля 2019

У меня есть база данных сотрудников, которая содержит записи о сотрудниках.Поля:

  • employee_identifier
  • employee_salary
  • date_of_the_record

Я хотел бы получить, длякаждая запись, дата последнего изменения в employee_salary.Какой запрос SQL может работать?

Я пробовал несколько подзапросов, но он не работает.

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT * EXCEPT(arr),
  (SELECT MAX(date_of_the_record) FROM UNNEST(arr)
    WHERE employee_salary != t.employee_salary
  ) AS last_change_in_employee_salary
FROM (
  SELECT *, ARRAY_AGG(STRUCT(employee_salary, date_of_the_record)) OVER(win) arr
  FROM `project.dataset.employee_database`
  WINDOW win AS (PARTITION BY employee_identifier ORDER BY date_of_the_record)
) t
0 голосов
/ 02 июля 2019

Вы также можете сделать это без подзапроса.Если вам нужны все столбцы:

SELECT as value ARRAY_AGG(t ORDER BY date_of_the_record DESC LIMIT 1)[ordinal(1)]
FROM t t
GROUP BY employee_identifier;

Если вы хотите просто указать дату, используйте GROUP BY:

SELECT employee_identifier, MAX(date_of_the_record)
FROM t t
GROUP BY employee_identifier;
0 голосов
/ 02 июля 2019

использование row_number()

with cte as
(
select *,
row_number()over(partition by employee_identifier order by date_of_the_record desc) rn from table_name
) select * from cte where rn=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...