如何获取 BigQuery 中的最新行

Posted

技术标签:

【中文标题】如何获取 BigQuery 中的最新行【英文标题】:How to get the latest rows in BigQuery 【发布时间】:2021-05-13 09:59:21 【问题描述】:

在 BigQuery 中,如何根据时间戳字段的最新值获取行?

例如,我有这张桌子。

first_name last_name use_auto login_at
James Davis true 2021-05-13 02:00:00 UTC
James Moore true 2021-05-13 02:00:01 UTC
James Green true 2021-05-13 02:00:02 UTC
Edward Green false 2021-05-13 03:00:00 UTC
Edward Wilson false 2021-05-13 03:00:01 UTC
James Davis false 2021-05-13 03:00:00 UTC
James Moore false 2021-05-13 03:00:01 UTC
James Green false 2021-05-13 03:00:02 UTC
Edward Green true 2021-05-13 02:00:00 UTC
Edward Wilson true 2021-05-13 02:00:00 UTC

我想这样查询后得到结果,

first_name last_name use_auto login_at
Edward Green false 2021-05-13 03:00:00 UTC
Edward Wilson false 2021-05-13 03:00:01 UTC
James Davis false 2021-05-13 03:00:00 UTC
James Moore false 2021-05-13 03:00:01 UTC
James Green false 2021-05-13 03:00:02 UTC

请告诉我应该使用什么查询。

【问题讨论】:

【参考方案1】:

BigQuery 中使用聚合的一种便捷方式:

select array_agg(t order by login_at desc)[ordinal(1)].*
from thistable t
group by first_name, last_name;

【讨论】:

【参考方案2】:

跟进 Gordon 的回答:添加 limit 1 以减少内存消耗并提高可扩展性:

select array_agg(t order by login_at desc limit 1)[ordinal(1)].*
from thistable t
group by t.first_name, t.last_name;

【讨论】:

我在我的问题中遗漏了一些东西。我编辑了表格。 use_auto 字段可以不同。能否请您告诉我在这种情况下的查询? 更新,跟进戈登的回答。

以上是关于如何获取 BigQuery 中的最新行的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery:仅当字段具有特定值时才获取表中的最新行

如何获取在 BigQuery 命令行工具中运行的最后一个作业的作业 ID?

BigQuery SQL如何在使用LIMIT时获取总数

BigQuery - 获取每个用户的最新数据

BigQuery更新如何获取更新的行数

BigQuery:如何获取列中特定字段的值?