根据时间戳填充网格日期

Populating grid date from based on timestamps

我想加入以下两个 table:

 select 
    user_id
    , date 
 from users 
 where id = 13 
 order by date descending
user_id date
13 2020-06-31
13 2020-06-30
13 2020-06-29
13 2020-06-28
13 2020-06-27
13 2020-06-26
select 
   user_id
   , date
   , orders_count_sum 
from orders 
where user_id = 13 
order by date descending
user_id date orders_count_sum
13 2020-06-30 3
13 2020-06-27 2
13 2020-06-26 1

我想加入订单 table 给用户,这样我就可以 orders_count_sum 填充日期:

userid date orders_count_sum
13 2020-06-31 3
13 2020-06-30 3
13 2020-06-29 2
13 2020-06-28 2
13 2020-06-27 2
13 2020-06-26 1

在此处进行左联接只会显示 order_count_sum 第二个 table 的日期。如何使用该日期的最新日期填充用户表格网格日期 orders_count_sum?

您可以使用 lead() 然后 join

select u.user_id, u.date, o.orders_count_sum
 from users u join
      (select o.*,
              lead(date) over (partition by o.user_id order by date) as next_date
       from orders o
      ) o
      on o.user_id = u.user_id and
         u.date >= o.date and
         (u.date < o.next_date or o.next_date is null);

如果您也需要,可以过滤到特定用户。

考虑以下方法

select user_id, date, 
  last_value(orders_count_sum ignore nulls) over win orders_count_sum
from users u 
left join orders o 
using (user_id, date)
window win as (partition by user_id order by date rows between unbounded preceding and current row)            

如果应用于您问题中的示例数据 - 输出为

正如您可能注意到的那样 - 在您的示例数据中,我将 MONTH 从 06 更改为 05,因为没有 JUNE 31 这样的日期,除非您使用 Priestley 的话幻想书