Java 有没有办法通过HQL获取小于或等于当前时间的最新条目?
我正在尝试获取最新的数据,这些数据在将来的日期之前不会被应用 目前,我正在使用以下HQL:Java 有没有办法通过HQL获取小于或等于当前时间的最新条目?,java,spring,hibernate,hql,Java,Spring,Hibernate,Hql,我正在尝试获取最新的数据,这些数据在将来的日期之前不会被应用 目前,我正在使用以下HQL: int x = goods.getId() String hql = "FROM PriceTags as atcl WHERE atcl.goods_id = '"+x+"' AND atcl.updatedDate <= CURTIME() ORDER BY updatedDate DESC"; return (PriceTags) entityManager.createQuery(hql).
int x = goods.getId()
String hql = "FROM PriceTags as atcl WHERE atcl.goods_id = '"+x+"' AND atcl.updatedDate <= CURTIME() ORDER BY updatedDate DESC";
return (PriceTags) entityManager.createQuery(hql).setMaxResults(1).getSingleResult();
假设今天是2019-08-01
我想得到第2行和第3行,因为它们是直到今天为止的最新条目。第5行直到明年1月才有意义,因此不会返回。我只想描述一种方式,而不是给出正确的查询 我假设goodsId、priceTag和UpdateDate是表priceTag中的3列
select distinct(p.goodsId), p.priceTag, p.updatedDate from PriceTag p order by p.updatedDate desc
我只是想描绘一种方式,而不是提出正确的问题 我假设goodsId、priceTag和UpdateDate是表priceTag中的3列
select distinct(p.goodsId), p.priceTag, p.updatedDate from PriceTag p order by p.updatedDate desc
为此需要一个窗口函数,请参见。这可以通过以下方式实现:
@实体
@资料
@表(name=“PriceTags”)
公共静态类价格标签{
@身份证
私有int-id;
古德希德私人酒店;
私人int价格;
私人日期更新日期;
}
...
FluentQuery query=FluentJPA.SQL((PriceTag标记)->{
Long rowNumber=聚合方式(ROW_NUMBER())
.OVER(分区(通过(tag.getGoodsId()))
.ORDER(BY(tag.getUpdateDate()).DESC())
.AS();
选择(标签);
从(标签);
其中(lessEqual(tag.getUpdateDate(),CURRENT_DATE())和&rowNumber==1);
});
return query.createQuery(em,PriceTag.class).getResultList();
这是结果SQL
SELECT t0.*
FROM PriceTags t0
WHERE ((t0.updated_date <= CURRENT_DATE ) AND
( ROW_NUMBER() OVER(PARTITION BY t0.goods_id ORDER BY t0.updated_date DESC ) = 1))
选择t0.*
从价格标签到
其中((t0.updated_date您需要一个窗口函数,请参阅。这可以通过以下方式完成:
@实体
@资料
@表(name=“PriceTags”)
公共静态类价格标签{
@身份证
私有int-id;
古德希德私人酒店;
私人int价格;
私人日期更新日期;
}
...
FluentQuery query=FluentJPA.SQL((PriceTag标记)->{
Long rowNumber=聚合方式(ROW_NUMBER())
.OVER(分区(通过(tag.getGoodsId()))
.ORDER(BY(tag.getUpdateDate()).DESC())
.AS();
选择(标签);
从(标签);
其中(lessEqual(tag.getUpdateDate(),CURRENT_DATE())和&rowNumber==1);
});
return query.createQuery(em,PriceTag.class).getResultList();
这是结果SQL
SELECT t0.*
FROM PriceTags t0
WHERE ((t0.updated_date <= CURRENT_DATE ) AND
( ROW_NUMBER() OVER(PARTITION BY t0.goods_id ORDER BY t0.updated_date DESC ) = 1))
选择t0.*
从价格标签到
其中((t0.updated_date)您可以包括一些示例输入/输出数据吗?用示例更新了我的问题吗?您可以包括一些示例输入/输出数据吗?用示例更新了我的问题