在 spark sql 中获取上一次特定月份的结果的最简单方法是啥?

Posted

技术标签:

【中文标题】在 spark sql 中获取上一次特定月份的结果的最简单方法是啥?【英文标题】:What is the simplest way to get results for last time specific month occurred in spark sql?在 spark sql 中获取上一次特定月份的结果的最简单方法是什么? 【发布时间】:2021-11-09 09:21:20 【问题描述】:

我有一个月作为输入,需要生成 sql 查询,该查询将获得该月最后一次出现的结果 - 所以上一年或当前年份取决于月份 - 但我希望它尽可能易于阅读。试过了,但它不起作用,因为你不能那样使用 CASE:

WHERE month(DateF) = 11
AND year(DateF) = (
CASE WHEN 11 > month(CURRENT_DATE) 
THEN year(CURRENT_DATE)-1
ELSE year(CURRENT_DATE)
)

【问题讨论】:

你能提供更多关于你的输入和你想要的输出的细节吗?我很难理解所有的事情 ex "5" 的输入,最后五月的输出数据 这里的复杂之处在于过滤器中的年份会有所不同,具体取决于今年是否已经过去 - 所以我不能每次都只使用当前年份 【参考方案1】:

您可以使用 Spark SQL 内置函数来处理日期和时间。这些函数能够以不同的格式处理不同的日期。

参考:https://www.obstkel.com/spark-sql-date-functions

【讨论】:

我知道,但他们似乎都没有这样做 - 如果我遗漏了什么,请指出具体细节【参考方案2】:

我认为您可以通过使用 current_date 和 day 列(如果有的话)来做到这一点:

WHERE month(dateF) = X AND day >=  date_add(current_date(), -365)

这对你来说可能吗?

【讨论】:

以上是关于在 spark sql 中获取上一次特定月份的结果的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询以获取特定年份的当前日期(考虑月份和日期)的数据

一次使用spark进行离线计算的实践

Spark SQL日期中月份的大写缩写形式

mysql中如何在上一次的查询结果中再次查询

SQLServer、Oracle获取当前年份的1月到当前月之间的所有月份

sql 在日期中挑选出特定月份的所有日期