如何获取 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 中的最新行的主要内容,如果未能解决你的问题,请参考以下文章