根据时间戳填充网格日期
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 的话幻想书
我想加入以下两个 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 的话幻想书