在Databricks中通过store_id获取表视图最新visit_date的问题
问题解决:Databricks中获取每个store_id的最新visit_date
原查询的问题点
- 窗口函数拼写错误:你写的
RPW_NUMBER()是笔误,正确的函数名是ROW_NUMBER(),拼写错误会导致排序分区逻辑完全失效,无法正确标记最新日期。 - 递归视图依赖:创建视图时直接从目标视图
abc_gold.student_vw查询,形成循环依赖,Databricks无法正确处理这种逻辑,必须从底层原始表获取数据。 - 可选优化:
SELECT *会把标记用的latest_date列也包含到视图中,若不需要可明确指定所需列。
修正后的查询示例
CREATE OR REPLACE VIEW abc_gold.student_vw AS SELECT store_id, visit_date from ( SELECT store_id, visit_date , ROW_NUMBER() OVER (PARTITION BY store_id ORDER BY TO_DATE(visit_date, 'dd-MM-yyyy') DESC) AS latest_date FROM abc_gold.student -- 替换为你的原始数据表名 ) L WHERE L.latest_date = 1
额外说明
如果你的visit_date是字符串类型(比如示例中的01-02-2024),直接用字符串排序可能会出现逻辑错误(比如10-01-2024会排在02-02-2024前面),所以建议用TO_DATE(visit_date, 'dd-MM-yyyy')转换为日期类型后再排序,确保日期顺序正确。
效果验证
针对你的示例数据:
store_id, visit_date 1 01-02-2024 1 02-02-2024
修正后的查询会返回唯一记录:
store_id, visit_date 1 02-02-2024
内容的提问来源于stack exchange,提问作者Chinnu
相关产品推荐
相关产品推荐

