HQL:上个月的最大日期
Posted
技术标签:
【中文标题】HQL:上个月的最大日期【英文标题】:HQL: Max date of previous month 【发布时间】:2020-07-20 13:43:44 【问题描述】:早上好, 我有一个问题一直在尝试解决,但现在正在解决。
我需要找到上个月的最大日期。通常我会使用以下内容来查找上个月的最后一天:last_day(add_months(current_date, -1)
但是,此特定数据集并不总是包含最后一天的数据。例如。 5 月数据的最后一天是 5 月 30 日。显然,如果我尝试使用上面的语法,它不会返回任何数据,因为它会寻找 5/31。
那么有没有办法在上个月的数据中找到“最大”天?还是前一个月等?
【问题讨论】:
数据的样子 我只需要返回上个月的最新数据。例如。 5 月有 31 天,但数据只加载到 5/30。寻找一种可以找到上个月“as_of_date”的最大日期的语法。 【参考方案1】:例如像这样(两次表扫描:一次在子查询中查找最大日期,一次在主查询中):
select *
from mytable
where as_of_date in (select max(as_of_date) from mytable where as_of_date between first_day(add_months(current_date, -1)) and last_day(add_months(current_date, -1))
或者(单次扫描+解析函数)这样
select col1 ... colN
from
(
select t.*, rank() over (partition by month (t.as_of_date) order by t.as_of_date desc) rnk
from mytable t
where --If you have partition on date, this WHERE may improve performance
t.as_of_date between first_day(add_months(current_date, -1)) and last_day(add_months(current_date, -1))
)s
where rnk=1
【讨论】:
谢谢@leftjoin。我尝试了第一个示例,但没有结果。我收到一个 sas 登录,但没有列出任何错误。 WHERE as_of_date in (select max(as_of_date) from LSTable where as_of_date 在 first_day(add_months(current_date, -1) 和 last_day(add_months(current_date, -1) 之间) 也许缺少括号?将其更改为以下内容,现在接收并出错 - WHERE as_of_date in (select max(as_of_date) from lnp_loanservicing where as_of_date between first_day(add_months(current_date, -1)) 和 last_day(add_months(current_date, -1))) 不支持的子查询表达式'as_of_date':相关表达式不能包含不合格的列引用。 @user1590497 确实缺少括号,已修复。未测试:) 谢谢。同样,在 sas 中没有结果,但没有错误日志。但是在代码行旁边有一个感叹号(!)。以上是关于HQL:上个月的最大日期的主要内容,如果未能解决你的问题,请参考以下文章