在这里发帖,以防知识渊博的人能够帮助我找到一些方向。
我有一个这样的表:
| Row | date |user id | score |
-----------------------------------
| 1 | 20201120 | 1 | 26 |
-----------------------------------
| 2 | 20201121 | 1 | 14 |
-----------------------------------
| 3 | 20201125 | 1 | 0 |
-----------------------------------
| 4 | 20201114 | 2 | 32 |
-----------------------------------
| 5 | 20201116 | 2 | 0 |
-----------------------------------
| 6 | 20201120 | 2 | 23 |
-----------------------------------
但是,由此,我需要为每个用户每天记录一个记录,如果用户缺少一天,则应保留最后记录的分数,然后我会得到如下所示的结果:
| Row | date |user id | score |
-----------------------------------
| 1 | 20201120 | 1 | 26 |
-----------------------------------
| 2 | 20201121 | 1 | 14 |
-----------------------------------
| 3 | 20201122 | 1 | 14 |
-----------------------------------
| 4 | 20201123 | 1 | 14 |
-----------------------------------
| 5 | 20201124 | 1 | 14 |
-----------------------------------
| 6 | 20201125 | 1 | 0 |
-----------------------------------
| 7 | 20201114 | 2 | 32 |
-----------------------------------
| 8 | 20201115 | 2 | 32 |
-----------------------------------
| 9 | 20201116 | 2 | 0 |
-----------------------------------
| 10 | 20201117 | 2 | 0 |
-----------------------------------
| 11 | 20201118 | 2 | 0 |
-----------------------------------
| 12 | 20201119 | 2 | 0 |
-----------------------------------
| 13 | 20201120 | 2 | 23 |
-----------------------------------
我正在尝试使用 StandardSQL 在 BigQuery 中实现此目的。我知道如何在以下空日期中保持相同的分数,但我真的不知道如何为每个用户的缺失日期添加新行。另外,请记住,这个示例只有 2 个用户,但在我的数据中,我有超过 1500 个用户。
我的最终目标是显示每天的平均得分之类的东西。对于背景,由于我们的逻辑,如果分数没有在特定日期记录,这意味着用户仍在最后记录的分数中,这就是为什么我每天需要每个用户的分数。
我真的很感激我能得到的任何帮助!我一直在尝试不同的选择但没有成功
以下是 BigQuery 标准 SQL
#standardSQL
select date, user_id,
last_value(score ignore nulls) over(partition by user_id order by date) as score
from (
select user_id, format_date('%Y%m%d', day) date,
from (
select user_id, min(parse_date('%Y%m%d', date)) min_date, max(parse_date('%Y%m%d', date)) max_date
from `project.dataset.table`
group by user_id
) a, unnest(generate_date_array(min_date, max_date)) day
)
left join `project.dataset.table` b
using(date, user_id)
-- order by user_id, date
如果应用于您问题中的样本数据 - 输出是
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)