You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于时间戳填充网格日期:如何补全左连接空缺的最新orders_count_sum

方案1:支持IGNORE NULLS的数据库(PostgreSQL/Spark SQL/Hive/BigQuery等)适用

先完成基础左连接,再通过窗口函数跳过空值取最近的非空订单数:

SELECT 
    u.user_id,
    u.date,
    LAST_VALUE(o.orders_count_sum) IGNORE NULLS OVER (
        PARTITION BY u.user_id 
        ORDER BY u.date DESC
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS orders_count_sum
FROM users u
LEFT JOIN orders o 
    ON u.user_id = o.user_id 
    AND u.date = o.date
WHERE u.user_id = 13
ORDER BY u.date DESC;

逻辑:左连接保留users表所有日期后,窗口按日期倒序排列,每一行取当前行及之前第一条非空的订单数,刚好匹配取最新有效订单数的需求。


方案2:全数据库通用写法(无数据库版本/语法限制)

通过关联子查询逐行匹配最近的订单记录:

SELECT 
    u.user_id,
    u.date,
    (
        SELECT o.orders_count_sum 
        FROM orders o
        WHERE o.user_id = u.user_id 
        AND o.date <= u.date
        ORDER BY o.date DESC
        LIMIT 1
    ) AS orders_count_sum
FROM users u
WHERE u.user_id = 13
ORDER BY u.date DESC;

逻辑:对users表的每一行日期,直接去orders表查找该用户小于等于当前日期的最新一条订单记录,返回对应的订单数,不会出现空值。

注:你示例中的2020-06-31为无效日期,实际业务使用时请注意日期合法性,不影响上述逻辑运行。

内容的提问来源于stack exchange,提问作者Grzesiek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:12:03