BigQuery中如何基于另一张表对用户分组内的记录进行过滤
原SQL错误原因
- 你对
table_1做GROUP BY userId但未对非分组字段加聚合函数,不符合SQL语法规范 - 子查询
SELECT lastTimestamp FROM \table_2` GROUP BY userId`会返回所有userId对应的多条lastTimestamp结果,不能直接和单值做大小比较
正确实现方案
直接用INNER JOIN关联两张表,按userId匹配后过滤符合时间条件的记录即可,SQL写法如下:
SELECT t1.userId, t1.timestamp FROM `table_1` t1 INNER JOIN `table_2` t2 ON t1.userId = t2.userId WHERE t1.timestamp < t2.lastTimestamp
注意事项
- 由于你的timestamp和lastTimestamp都是STRING类型,且存储格式为
YYYY-MM-DD,字符串字典序和时间顺序一致,直接比较不会出错 - 如果时间格式不统一,建议先转为DATE类型再比较,写法为
DATE(t1.timestamp) < DATE(t2.lastTimestamp)
该写法执行结果和你给出的预期输出完全匹配。
内容的提问来源于stack exchange,提问作者Zelazny
相关产品推荐
相关产品推荐

