HQL:找到一个工作日值或一个工作日之前的值

时间:2020-07-30 01:33:57

标签: java mysql hibernate hql

场景: 我有一个数据库,其中有一个基金表和一个报价表(每日股价),我需要计算每周每只基金的每周表现(周日的价值-上周日的价值)。为此,我需要从数据库中的每个星期日获取基金价格。问题是在某些星期日没有值,因此我需要在星期日之前取最接近的值。

我当前的“解决方案”(非常慢):

        List<Double> result = new ArrayList<>();

        LocalDate date = startDate;
        date = date.with(previous(SUNDAY));

        LocalDate end = LocalDate.now();
        end = end.with(next(SUNDAY));

        while (date.isBefore(end))
        {
            date = date.with(next(SUNDAY));
            result.add(
                    session.createQuery("select price from QuotesEntity where fundId = :a and date < :b Order By date desc", Double.class)
                    .setParameter("a", fundId)
                    .setParameter("b", Date.valueOf(date))
                    .setMaxResults(1)
                    .getSingleResult());
        }

        return result;

当前代码问题: 之所以如此缓慢,是因为我需要每个基金要求至少150个以上的查询,并且在生产中,我的数据库中将有大约200万个基金,而不是我用于测试的300个基金。最好的情况是,我只需要查询1个即可获得1个基金的所有周日值(或之前的值)。

我已经尝试索引date列和fundId列,这对它进行了一些改进,但是它在服务器上需要大量磁盘空间。

0 个答案:

没有答案