获取 Google BigQuery 中值的最后一次更改时间

Posted

技术标签:

【中文标题】获取 Google BigQuery 中值的最后一次更改时间【英文标题】:Get the last time a value has changed in Google BigQuery 【发布时间】:2019-07-02 07:32:45 【问题描述】:

我有一个员工数据库,其中包含有关员工的记录。字段是:

employee_identifier employee_salary date_of_the_record

对于每条记录,我想获取 employee_salary 中最后一次更改的日期。哪个 SQL 查询可以工作?

我尝试了多个子查询,但它不起作用。

【问题讨论】:

我同意如果您添加示例数据和示例结果会是一个更好的问题。另外,您到目前为止尝试过的内容以及遇到的问题。 【参考方案1】:

以下是 BigQuery 标准 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

【讨论】:

【参考方案2】:

使用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

【讨论】:

【参考方案3】:

您也可以在没有子查询的情况下执行此操作。如果你想要所有的列:

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;

【讨论】:

我想得到的是最后一次薪水变动的日期。您的查询是否给出了这个?

以上是关于获取 Google BigQuery 中值的最后一次更改时间的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery:检索每行的最后一个版本

BigQuery:除以列中值的总和以找到比率

google-bigquery 如何使用 https 获取数据集列表?

从 Google 表格获取数据到 BigQuery

如何在 Google 的 Bigquery 中获取最频繁的值

通过 BigQuery 从 Google 分析中获取访问者纬度和经度