我只有一行,包括Date_Start,Date_End和Budget。 想法是获取Date_Start和Date_End之间的天数,以展示按天平均分配的预算。
示例:
来源(日期为yyyy-mm-dd):
Date_Start,Date_End,budget
2018-04-01,2018-04-10, 300
结果显示为:
day, budget
2018-04-01, 30
2018-04-02, 30
2018-04-03, 30
2018-04-04, 30
2018-04-05, 30
2018-04-06, 30
2018-04-07, 30
2018-04-08, 30
2018-04-09, 30
2018-04-10, 30
您是否知道如何通过SQL做到这一点?我正在专门使用BigQuery。
答案 0 :(得分:2)
以下BigQuery标准SQL示例
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2018-04-01' Date_Start, DATE '2018-04-10' Date_End, 300 budget
)
SELECT day, budget / (1 + DATE_DIFF(Date_End, Date_Start, DAY)) budget
FROM `project.dataset.table`,
UNNEST(GENERATE_DATE_ARRAY(Date_Start, Date_End)) day
结果:
Row day budget
1 2018-04-01 30.0
2 2018-04-02 30.0
3 2018-04-03 30.0
4 2018-04-04 30.0
5 2018-04-05 30.0
6 2018-04-06 30.0
7 2018-04-07 30.0
8 2018-04-08 30.0
9 2018-04-09 30.0
10 2018-04-10 30.0
答案 1 :(得分:0)
如果SQL实现支持WITH,那么有一种不需要存储过程的解决方案。 抱歉,我不知道BigQuery是否提供这种支持,但我可以使用MariaDB 10.3.9进行说明。
fig, ax = plt.subplots()
for name, g in df.groupby('id'):
g.plot(x='x',y='y', marker='o', ax=ax, label=name)
结果将满足您的要求,但不进行错误检查,例如,它假定date_end早于date_start。