Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据BigQuery中的某一天光标获取具有特定天/月的以下日期?_Sql_Date_Google Bigquery - Fatal编程技术网

Sql 如何根据BigQuery中的某一天光标获取具有特定天/月的以下日期?

Sql 如何根据BigQuery中的某一天光标获取具有特定天/月的以下日期?,sql,date,google-bigquery,Sql,Date,Google Bigquery,我在BigQuery中有一个表,跟踪我进行的交易,我希望能够轻松地计算从今天开始的下一个计费日期。 因此,我有以下字段: 第一笔交易的日期 当前日期 付款类型(年、月、周、日) 根据付款类型,我希望能够轻松计算下一个结算日期 例如,如果第一笔交易的日期=“2019-06-11”和当前日期=“2021-04-27”和付款类型=“每年”,那么我的下一个结算日期将是“2021-06-11” 另一个例子:如果第一笔交易的日期=“2020-12-13”和当前日期=“2021-04-27”和付款类型=“

我在BigQuery中有一个表,跟踪我进行的交易,我希望能够轻松地计算从今天开始的下一个计费日期。 因此,我有以下字段:

  • 第一笔交易的日期
  • 当前日期
  • 付款类型(年、月、周、日)
根据付款类型,我希望能够轻松计算下一个结算日期

例如,如果第一笔交易的
日期=“2019-06-11”
当前日期=“2021-04-27”
付款类型=“每年”
,那么我的下一个结算日期将是
“2021-06-11”

另一个例子:如果第一笔交易的
日期=“2020-12-13”
当前日期=“2021-04-27”
付款类型=“每月”
,那么我的下一个结算日期将是
“2021-05-13”

我在想,如果没有
CASE的音调,当。。。然后结束

你知道吗


谢谢大家!

如果我理解正确,您可以使用
date\u diff()
date\u add()


注意:一定要测试一下。这可能不是您想要的,因为
date\u diff()
返回两个值之间的日期边界数。

当第一笔交易的
date\u的日期小于
当前日期时,它会起作用(例如
首次交易日期=2020-06-11
当前交易日期=2021-04-27
付款类型=每月
返回
2021-05-11
),但当首次交易日期
高于此日期时,返回为假(例如第一笔交易的日期=2021-01-31
和当前日期=2021-04-27和付款类型=每月它返回的是
2021-05-31
,应该是
2021-04-31
)@Gordonlinoff这里有两个问题:1)
如何轻松计算下一个结算日期?
和2)
我如何才能正确地做到这一点,而不需要在。。。然后结束?
-您关注的是哪一个?通常每个帖子应该有一个问题,否则你得到答案的机会就少了。我很想插嘴,但不知该回答哪个问题?
select t.*,
       (case when payment_type = 'yearly'
             then date_add(date_of_first_transaction,
                           interval (1 + date_diff(current_date, date_of_first_transaction, year)) year)
             when payment_type = 'monthly'
             then date_add(date_of_first_transaction,
                           interval (1 + date_diff(current_date, date_of_first_transaction, month)) month)
             when payment_type = 'weekly'
             then date_add(date_of_first_transaction,
                           interval (1 + date_diff(current_date, date_of_first_transaction, week)) week)
             when payment_type = 'daily'
             then date_add(date_of_first_transaction,
                           interval (1 + date_diff(current_date, date_of_first_transaction, day)) day)
        end)     
from t;