SQL按行平均分配值

时间:2018-08-27 16:23:19

标签: sql google-bigquery

我只有一行,包括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。

2 个答案:

答案 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。