我正在使用dbplyr访问数据库中的数据,并试图计算滚动总和金额,其中包括前1年的所有金额。我的日期是dttm格式。我试图获得一个表,显示Start_Date之前的1年,类似于下面:
| 开始日期|过去_1年|
| --------------|--------------|
| 2021-07-02 08:03:29|2020-07-02 08:03:29|
| 2021-07-09 06:36:28|2020-07-09 06:36:28|
| 2021-07-09 09:29:02|2020-07-09 09:29:02|
| 2021-07-16 08:26:30|2020-07-16 08:26:30|
| 2021-07-23 07:35:51|2020-07-23 07:35:51|
| 2021-07-30 09:19:13|2020-07-30 09:19:13|
我想从Start_Date中减去1年,以获得每行/观察的滚动一年窗口,用于滚动总和计算。
我以前在dplyr中做过这个,我通常会使用下面的代码来得到这个:
output = df %>%
mutate(Previous_1year = Start_Date %m+% years(-1))
然而,这个方法似乎与dbplyr和我的数据库不兼容,假设这是因为dbplyr不知道如何将代码转换回SQL。
我还尝试在dbplyr中运行以下代码,这是我在SO中的另一个问题中发现的:
output = df %>%
mutate(Previous_1year = sql('DATEADD(y, -1, Start_Date)'))
但我得到以下错误,不知道为什么我得到一个无效的日期时间:
! nanodbc/nanodbc.cpp:1752: XX000: [Amazon][Amazon Redshift] (30)
Error occurred while trying to execute a query: [SQLState XX000] ERROR: Invalid datetime part for DATEADD().
因为数据太大了,我无法收集所有的数据,并通过dplyr进行数据处理,从我的每个Start_Date观测值中减去1年。所以,希望首先在数据库中进行此操作,这样我就可以在收集结果之前进行计算。
1条答案
按热度按时间tuwxkamq1#
这适用于Postgres,所以可能适用于Redshift:
创建于2023-04-03带有reprex v2.0.2