【发布时间】:2022-10-13 03:42:15
【问题描述】:
给定下表:
用户:
| name |
|---|
| alice |
| bob |
余额:
| id | user_name | date | balance |
|---|---|---|---|
| 1 | alice | 2022-01-01 | 100 |
| 2 | alice | 2022-01-03 | 200 |
| 3 | alice | 2022-01-04 | 300 |
| 4 | bob | 2022-01-01 | 400 |
| 5 | bob | 2022-01-02 | 500 |
| 6 | bob | 2022-01-05 | 600 |
我想获得所有用户从第一天到最后一天的完整列表,用该用户的最后可用余额替换 NULL 余额。
这是我到目前为止所拥有的:
select u.name, s.day, b.balance
from users u
cross join (select generate_series(min(day)::date, max(day)::date, interval '1 day')::date as day from balances) s
left join balances b on b.user_name = u.name and s.day = b.day
order by u.name, s.day
;
我已经尝试过LAG() 和此处找到的其他一些示例,但它们似乎都没有为用户获得正确的最后平衡。
【问题讨论】:
标签: sql postgresql left-join