google-cloud-platform - 根据两个条件获取 BigQuery 中每个 user_id 的最新行
问题描述
我有一个包含 3 个重要列的 Bigquery 表:
user_id
, created_at
, updated_at
.
每个都user_id
可以有多个记录,例如:
+----------+------------+-------------+-----------------+
| user_id | created_at | updated_at | task_name |
+----------+------------+-------------+-----------------+
| user_1 | 2020-01-01 | 2020-01-02 | some_task_name1 |
| user_1 | 2020-01-01 | 2020-01-03 | some_task_name1 |
| user_1 | 2020-03-01 | 2020-03-01 | some_task_name1 |
| user_2 | 2020-01-01 | 2020-01-02 | some_task_name2 |
+----------+------------+-------------+-----------------+
对于每个user_id
具有相同created_at
值的记录,我想选择最新的记录updated_at
。例如,在这个例子中,输出必须是:
+----------+------------+-------------+-----------------+
| user_id | created_at | updated_at | task_name |
+----------+------------+-------------+-----------------+
| user_1 | 2020-01-01 | 2020-01-03 | some_task_name1 |
| user_1 | 2020-03-01 | 2020-03-01 | some_task_name1 |
| user_2 | 2020-01-01 | 2020-01-02 | some_task_name2 |
+----------+------------+-------------+-----------------+
我正在尝试这个,但我不知道如何添加相同的条件created_at
:
SELECT
agg.table.*
FROM (
SELECT
user_id,
ARRAY_AGG(STRUCT(table)
ORDER BY
updated_at DESC)[SAFE_OFFSET(0)] agg
FROM
`dataset.my_table` table
GROUP BY
user_id)
解决方案
推荐阅读
- javascript - 完全渲染后 blazor 中的 window.status
- javascript - 使用 jQuery 和 JavaScript 隐藏特定元素
- c# - 在来自实体框架的查询中检查字符串是否不包含 C# 中的字符串数组的字符串
- typo3 - Typo3 8.7.31 和扩展 fe_manager:找不到 TypoScript
- c# - 如何在函数中创建一个与传递给 C# 函数的参数同名的新变量?
- css - 垂直显示 CakePHP 单选按钮
- html - 按钮在媒体查询中没有响应
- python - Python硒无效参数?
- c# - 如何在 ASP.NET 中干净地共享数据模型、ViewModel 和 DTO 的自定义验证器 (ValidationAttribute)
- reactjs - 为 react-redux 转换为 ES6 类版本的 Private Route 功能代码