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:上个月的最大日期的主要内容,如果未能解决你的问题,请参考以下文章

SOA 转换中的 XSLT 映射以获取上个月的最大日期

hql日期和字符串的比较

SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较

没有时间戳的 HQL 中的日期比较

当前日期查询不起作用HQL

如何使用 Joda Time 查询 HQL (Hibernate) 中的日期?