从日期中减去天数,然后将结果舍入到 Redshift 中的周末日期

Posted

技术标签:

【中文标题】从日期中减去天数,然后将结果舍入到 Redshift 中的周末日期【英文标题】:Subtract days from date, and then round result to end of week date in Redshift 【发布时间】:2019-01-23 19:16:05 【问题描述】:

对不起,如果这听起来有点混乱......

我正在使用一个表格,该表格每周汇总数据,从周日到周六。日期列存储周末日期;例如,上周将是 2019-01-19 的周末日期。

我正在尝试从上周的结束日期 2019-01-19 减去 360 天后的总记录。但是,如果我减去 360 天,并且日期不是星期六,则记录将被忽略。

如何从 2019 年 1 月 19 日减去 360 天,并确保计算的日期也舍入到该周的结束日期?

2019-01-19 - 360 = 2018-01-24,这是一个星期三。我希望它四舍五入到那周的星期六,2018-01-27

【问题讨论】:

所以你基本上想减去一个倍数而不是 360? 【参考方案1】:

这样的事情应该可以 我还没有测试过,但是你看到了这个想法,可以根据你的需要进行修改

select (date_trunc('week','2019-01-19'::date) - (interval '1 week' * floor(360/7))) + interval '6 days';

如果它关闭并且您看不到要进行哪些更改以使其正常工作 - 然后发表评论。

【讨论】:

不要完全理解(例如间隔+6天部分),但会玩弄它 这个想法是 1) 到一周的第一天 2) 减去正确的周数 3) 添加 6 天到一周的最后一天【参考方案2】:

在 Google BigQuery 标准 SQL 中,您可以执行以下操作:

SELECT DATE_TRUNC(DATE_ADD(<YOUR_DATE>), INTERVAL -360 DAY), WEEK(SATURDAY))

【讨论】:

以上是关于从日期中减去天数,然后将结果舍入到 Redshift 中的周末日期的主要内容,如果未能解决你的问题,请参考以下文章

如何从/到日期减去/添加天数?

如何在 TypeScript 中从日期中减去天数

如何快速将 Double 舍入到最近的 Int?

使用 SORT 从日期中减去天数

如何从普通日期中减去天数?

在 SQL 查询中将日期舍入到当天