Sql 使用另一个表中的日期条件求和
我希望根据合同类型(月到月或长期)和未来的日期标准,计算收入和产品投放数量的总和。例如,我想知道我们的MRR有多少来自MTM合同和2019年1月1日的长期合同,以此类推 我们有两种类型的合同:月到月(MTM)和长期合同。我们的客户合同在到期时会转换为MTM(MTM到期月份),因此我们试图准确地想象未来将有多少转换为MTM。MRR是每月的经常性收入,所以本质上是收入 我想计算的是什么 如果MRR退出月份(如2019-04-01)>月份(如2019-01-01),则对MRR求和。这是每月的经常性收入 如果MRR退出月份(如2019-01-01)<月份(2019-02-01)和MRR。这是长期MRR 这是我的数据表:Sql 使用另一个表中的日期条件求和,sql,google-bigquery,Sql,Google Bigquery,我希望根据合同类型(月到月或长期)和未来的日期标准,计算收入和产品投放数量的总和。例如,我想知道我们的MRR有多少来自MTM合同和2019年1月1日的长期合同,以此类推 我们有两种类型的合同:月到月(MTM)和长期合同。我们的客户合同在到期时会转换为MTM(MTM到期月份),因此我们试图准确地想象未来将有多少转换为MTM。MRR是每月的经常性收入,所以本质上是收入 我想计算的是什么 如果MRR退出月份(如2019-04-01)>月份(如2019-01-01),则对MRR求和。这是每月的经常性收入
Companies | Placement | MRR | Start_Date | term_length | MRR_Exiting_Month
ANTON | 2 | 300 | 2018-01-01 | 13 | 2019-02-01
ANKER | 1 | 600 | 2018-07-01 | 6 | 2019-01-01
ANTON | 2 | 300 | 2018-08-15 | 7 | 2019-02-01
ANTON | 2 | 500 | 2018-10-01 | 5 | 2019-03-01
ANTON | 2 | 300 | 2018-08-01 | 8 | 2019-04-01
我使用以下公式计算了每月的MRR\u:
date_add(parse_date('%F',start_date), INTERVAL term_length MONTH) as contract_end_month
我使用generate_date_array
在不同的表中填充接下来的月份,但不确定如何在不连接它们的情况下从两个不同的表中使用case。我期待着这样的结果:
Month | MTM MRR | Long Term MRR |
2018-10-01 | 0 | 2000 |
2018-11-01 | 0 | 2000 |
2018-12-01 | 0 | 2000 |
2019-01-01 | 600 | 1400 |
2019-02-01 | 1200 | 800 |
2019-03-01 | 1700 | 300 |
2019-04-01 | 2000 | 0 |
2019-05-01 | 2000 | 0 |
如果MRR月大于未来某个月,我正在考虑将MRR和安置相加。理想情况下,结果表如下所示:
Month | MTM MRR | Long Term MRR |
2018-10-01 | 0 | 2000 |
2018-11-01 | 0 | 2000 |
2018-12-01 | 0 | 2000 |
2019-01-01 | 600 | 1400 |
2019-02-01 | 1200 | 800 |
2019-03-01 | 1700 | 300 |
2019-04-01 | 2000 | 0 |
2019-05-01 | 2000 | 0 |
在BigQuery中,最好的方法是什么?我感谢你的帮助 下面是BigQuery标准SQL的示例
#standardSQL
WITH months AS (
SELECT month
FROM UNNEST(GENERATE_DATE_ARRAY('2018-10-01', '2019-05-01', INTERVAL 1 MONTH)) month
)
SELECT
month,
SUM(IF(MRR_Exiting_Month <= month, MRR, 0)) MTM_MRR,
SUM(IF(MRR_Exiting_Month > month, MRR, 0)) Long_Term_MRR
FROM months
CROSS JOIN `project.dataset.table` t
GROUP BY month
向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。是,请提供输入数据和预期输出的示例。理想情况下,将输入数据与语句一起呈现,以便我们关注您的问题,而不是再现您的数据:o)我将相应地调整问题。谢谢你的邀请feedback@JuanCarlosOropeza@Mikhailberlyan我只是编辑了这个问题。请让我知道这是否足够。对不起,我对编码世界还是新手。我一直在阅读stackoverflow的教程,但是还有很多东西要学呢谢谢你的回答!!我会到处玩看看。如果我的原始表中不存在MRR\u Exiting\u Month列,它会改变什么吗?我必须自己计算那个专栏。可能在这种情况下使用另一个子查询?当然。你已经得到了你所要求的——这取决于你去适应你在现实中所拥有的一切。考虑接受答案,同时投票吧!谢谢你,这帮了大忙!
Row month MTM_MRR Long_Term_MRR
1 2018-10-01 0 2000
2 2018-11-01 0 2000
3 2018-12-01 0 2000
4 2019-01-01 600 1400
5 2019-02-01 1200 800
6 2019-03-01 1700 300
7 2019-04-01 2000 0
8 2019-05-01 2000 0