有人知道如何转换postgresql查询
select avg(stock.price) from stock where (stock.name = 'some_name' and stock.date in (select stock.date from stock where stock.name = 'some_name' limit 10))
使用@Query注释进行JPA查询?
现在我有些混乱,但工作一塌糊涂:
public Double countStocksAvgToDateAndDaysAmount(String stockName, String date, Integer days) {
List<StockEntity> stocksByNameTillDate = stockRepository.getStocksByNameTillDates(stockName,
java.sql.Date.valueOf(date));
Integer countDays = 0;
Double sum = 0.0;
Double avg = 0.0;
for (StockEntity stock : stocksByNameTillDate) {
countDays++;
sum += stock.getPrice();
if (countDays >= days) {
break;
}
}
avg = sum / countDays;
return avg;
}
函数 stockRepository.getStocksByNameTillDates()使用@Query
@Query("select stock from StockEntity stock where ((stock.name like :name) and (stock.date <= :date))")
public List<StockEntity> getStocksByNameTillDates(@Param("name") String name,@Param("date") Date date);
我认为这有点(或者更糟,不止一点)次优。 我读到JPA查询不支持 limit 。
有人知道如何改进或使这些代码更优化吗?我的意思是JPA为我而不是这个类做这个的方式,而不是使我的java代码更优化。
答案 0 :(得分:-2)
这可能有助于您使用jpa查询获取10行。
String hql = "SELECT avg(stock.price) from Stock stock where (stock.name = :stockName and stock.date in (select stock.date from stock where stock.name = :stockName))";
Query query = session.createQuery(hql);
query.setParameter("stockName", "stockName");
List results = query.list();
// If you want to fetch only 10 rows then
query.setMaxResults(10); //it takes only an integer parameter