获取 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 如何使用 https 获取数据集列表?