Sql 如何根据BigQuery中的某一天光标获取具有特定天/月的以下日期?
我在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”和付款类型=“
- 第一笔交易的日期
- 当前日期
- 付款类型(年、月、周、日)
日期=“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;