BigQuery: повторите одно и то же вычисленное значение в нескольких строках - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь получить несколько простых запросов в одну новую таблицу с помощью Googe Big Query. В финальной таблице представлены данные о доходах за день (которые я могу просто извлечь из другой таблицы). Затем я хочу рассчитать средний доход за день текущего месяца и продолжить это значение до конца месяца. Таким образом, финальная таблица обновляется каждый день и включает в себя фактические данные и прогнозные данные.

До сих пор я придумал следующее, которое генерирует сообщение об ошибке в сочетании: Scalar subquery produced more than one element

  #This gives me the date, the revenue per day and the info that it's actual data

            SELECT
            date, sum(revenue), 'ACTUAL' as type from `project.dataset.table` where date >"2020-01-01" and date < current_date() group by date
            union distinct

 # This shall provide the remaining dates of the current month  
            SELECT 
        (select calendar_date  FROM `project.dataset.calendar_table` where calendar_date >= current_date() and calendar_date <=DATE_SUB(DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL 1 DAY)),

#This shall provide the average revenue per day so far and write this value for each day of the remaining month
            (SELECT  avg(revenue_daily)  FROM 
            (select  sum(revenue) as revenue_daily from `project.dataset.table` WHERE date > "2020-01-01" and extract(month from date) = extract (month from current_date()) group by date) as average_daily_revenue where calendar >= current_date()), 
        'FORECAST'

Как я sh окончательные данные будут выглядеть так:

+------------+------------+----------+
|    date    |  revenue   |   type   |
+------------+------------+----------+
| 01.04.2020 | 100 €      | ACTUAL   |
| …          | 5.000 €    | ACTUAL   |
| 23.04.2020 | 200 €      | ACTUAL   |
| 24.04.2020 |  230,43 €  | FORECAST |
| 25.04.2020 |  230,43 €  | FORECAST |
| 26.04.2020 |  230,43 €  | FORECAST |
| 27.04.2020 |  230,43 €  | FORECAST |
| 28.04.2020 |  230,43 €  | FORECAST |
| 29.04.2020 |  230,43 €  | FORECAST |
| 30.04.2020 |  230,43 €  | FORECAST |
+------------+------------+----------+

Прогнозное значение - это просто сумма фактического дохода за месяц, деленная на количество дней месяц до сих пор.

Спасибо за любой намек на то, как подойти к этому.

1 Ответ

1 голос
/ 28 апреля 2020

Я только что понял, что создает данные, которые мне нужны. Я все еще буду обновлять это каждый день автоматически. Но это то, что я получил до сих пор:

select 
date, 'actual' as type, sum(revenue) as revenue from `project.dataset.revenue` where date >="2020-01-01" and date < current_date() group by date
union distinct
select calendar_date, 'forecast',(SELECT  avg(revenue_daily)  FROM 
(select  sum(revenue) as revenue_daily from `project.dataset.revenue` WHERE extract(year from date) = extract (year from current_date()) and extract(month from date) = extract (month from current_date()) group by date order by date) as average_daily_revenue),  FROM `project.dataset.calendar` where calendar_date >= current_date() and calendar_date <=DATE_SUB(DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL 1 DAY) order by date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...