我想在Google BigQuery中使用现有的每日收入数据创建一个新表,并使用基于现有数据并需要创建的预测数据扩展该新表。一旦存在某天的新实际数据,它将覆盖该天的预测数据。而且,直到月底的预测数据都将再次更新。
到目前为止,我想出了以下内容,它会生成一条 错误消息 :Scalar subquery produced more than oneelement
SELECT
date, sum(yl_revenue), 'ACTUAL' as type
from project.dataset.table
where date >"2020-01-01" and date < current_date()
group by date
union distinct
SELECT
(select calendar_date
FROM
UNNEST(GENERATE_DATE_ARRAY('2020-01-01', DATE_SUB(DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL 1 DAY), INTERVAL 1 DAY))
AS calendar_date),
avg(revenue_daily) as average_daily_revenue,
'FORECAST' as type 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)
我希望数据看起来如何:
+------------+------------+----------+
| 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 |
+------------+------------+----------+
在第二天(2020年4月24日),它应如下所示:
+------------+--------------+----------+
| date | revenue | type |
+------------+--------------+----------+
| 01.04.2020 | 100 € | ACTUAL |
| … | 5.000 € | ACTUAL |
| 23.04.2020 | 200 € | ACTUAL |
| 24.04.2020 | 1.000,00 € | ACTUAL | <----
| 25.04.2020 | 262,50 € | FORECAST |
| 26.04.2020 | 262,50 € | FORECAST |
| 27.04.2020 | 262,50 € | FORECAST |
| 28.04.2020 | 262,50 € | FORECAST |
| 29.04.2020 | 262,50 € | FORECAST |
| 30.04.2020 | 262,50 € | FORECAST |
+------------+--------------+----------+
预测值只是该月的实际收入之和除以该月到目前为止的天数。请注意,第二个表中的每日预测值已更改,因为已将新的实际值添加到该表中。
非常感谢您提供有关如何解决此问题的帮助!
谢谢
一月
我找到了解决问题的方法。(尽管它可能不是最复杂的一种)
我现在想出了3个新表:
MERGE
查询。以下是各个查询:
1)
SELECT
*
FROM
UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2030-12-31', INTERVAL 1 DAY)) AS calendar_date
WITH
OFFSET
AS
OFFSET
ORDER BY
OFFSET
2)
SELECT
date,
'actual' AS type,
ROUND(SUM(revenue),2)
FROM
`project.dataset.revenue_data`
WHERE
EXTRACT(year
FROM
date) = EXTRACT (year
FROM
CURRENT_DATE())
AND EXTRACT(month
FROM
date) = EXTRACT (month
FROM
CURRENT_DATE())
GROUP BY
date
UNION DISTINCT
SELECT
calendar_date,
'forecast',
(
SELECT
ROUND(AVG(revenue_daily),2)
FROM (
SELECT
SUM(revenue) AS revenue_daily
FROM
`project.dataset.revenue_data`
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
3)
MERGE
`project.dataset.forecast_table` f
USING
`project.dataset.forecast_month` m
ON
f.date = m.date
WHEN MATCHED THEN UPDATE SET f.type = m.type, f.revenue = m.revenue
WHEN NOT MATCHED
AND m.date >= CURRENT_DATE() THEN
INSERT
(date,
type,
revenue)
VALUES
(date, type, revenue)
问题内容: 怎么可能 等到动作完成后再继续循环,我不能得到$ this var,因为它具有最后一个值,对不起我的英语,谢谢!!! 问题答案: 选项1:切换到处理程序中数组中的下一个元素。 选项2:同步发出Ajax请求: 全球: 或直接在请求中: });
目标: 需要向现有的Debezium MySQL连接器版本1.1.1添加一个新表。最终的连接器重新启动后,应使用更新的配置(table.whitelist中的新表)将表中的数据填充到主题中。 问题: 没有明确的策略来添加一个新表,该表将在初始快照完成后(连接器的前一个版本正在工作)与其数据一起添加到Kafka中。我们正在寻找类似于snapshot.select.statement.override
我必须找出两个日期在月和天之间的区别。我尝试了谷歌,但我只发现了月份和日期的差异。 例如:2013年4月1日和2013年5月7日,那么结果应该是1个月6天。 我希望代码只使用Java6提供的api。推荐但不喜欢Joda Time和其他。谢谢你的帮助。
Python3 实例 以下代码通过导入 calendar 模块来计算每个月的天数: # Filename : test.py # author by : www.runoob.com import calendar monthRange = calendar.monthrange(2016,9) print(monthRange) 执行以上代码输出结果为: (3, 30) 输出的是一个元
我试图创建一个生日计算器,也包括几个月和几天,而不仅仅是几年。 然而,我似乎无法让它发布答案,当它发布时,它是不正确的。 我还在学习,所以我真的很感激任何反馈,我希望这是我忽略的简单的东西。
问题内容: 我有一张表,如下所示: 我从中创建以下视图: 现在,当我想创建每月计数以了解如何将每日总和除以得出平均列a(即特定月份中的天数)时,就会出现问题。 我知道要在PostgreSQL中获得成功,您可以: 但是我不能使用,我必须以某种方式让它知道分组完成的月份。任何建议,即什么应该取代 ??? 在此视图中: 问题答案: 更快,更短一点,您得到的是天数,而不是: 可以将多个单位合并为一个值。因