我有以下数据集
顾客 | 初始日期 | 限制_日期 |
---|---|---|
菲尔 | 2023-01-01 | 2023-06-01 |
约翰 | 2023-03-01 | 2023-07-01 |
艾莉 | 2023-09-01 | 2023-10-01 |
马克 | 2023-12-01 | 2024-03-01 |
我想按月计算客户在 inial_date 和 limit_date 之间的行数。 我需要得到下面的结果。
月 | 客户数量 |
---|---|
2023-01 | 1 |
2023-02 | 1 |
2023-03 | 2 |
2023-04 | 2 |
2023-05 | 2 |
2023-06 | 2 |
2023-07 | 1 |
2023-08 | 0 |
2023-09 | 1 |
2023-10 | 1 |
2023-11 | 0 |
2023-12 | 1 |
2024-01 | 1 |
2024-02 | 1 |
2024-03 | 1 |
回答 databricks 因为它更容易。
如果您希望不等式不包含在内,您可以在连接中进行调整。如果您想要更广泛的日期范围,请将参数更改为sequence()。
%sql
with all_dates as (
select explode(sequence(DATE'2023-01-01', DATE'2024-03-01', INTERVAL 1 DAY)) as day_sequence
)
select all_dates.day_sequence,
sum(case when yt.customer is not null then 1
else 0
end) as count_on_day
from all_dates
left join
your_table yt
on all_dates.day_sequence >= yt.initial_date
and all_dates.day_sequence <= yt.limit_date
group by
all_dates.day_sequence