当前位置: 首页 > 知识库问答 >
问题:

QueryDSL中的平均日期差异

勾长卿
2023-03-14

我有一个实体,它有一个表示上次活动的日期对象。我想查询一下平均空闲时间。因此在SQL中,类似于:

SELECT AVG(NOW() - idle_date) FROM mytable WHERE ....

我试着这样算了一下差别:

query.singleResult(
    Expressions.dateOperation(
        Long.class, 
        Ops.DateTimeOps.DIFF_SECONDS,
        DateExpression.currentDate(),
        myTable.idleDate
    )
);

我如何以日期/时间差(以秒为单位)来表示这个平均值?

共有1个答案

和斌
2023-03-14

我相信您可以使用NumberTemplate对象;以下内容可以满足您的需要:NumberTemplate.Create(double.class,“avg(NOW()-{0})”,MyTable.idleDate);

 类似资料:
  • 我正在尝试使用QueryDSL计算平均日期差异。 我还尝试了其他方法,例如使用,但它没有返回正确的值。如果我们想要获得以秒为单位的日期差异,我们似乎需要找到一些方法来调用数据库特定的日期/时间差函数,而不仅仅是使用减号。 遗憾的是,在JPQL中计算日期差异似乎是不可能的,所以我想querydsl-jpa在这方面也有限制。因此,我们必须编写一个本机SQL查询,或者找到一些黑客来让QueryDSL生成

  • 我正在尝试使用QueryDSL计算用户年龄和日期差。 但失败时出现此错误 谢谢

  • 问题内容: 有没有一种方法可以在oracle中平均多个日期?平均没有任何好处。 谢谢。 问题答案: “平均日期”的定义是主观的,但是您可以将日期转换为儒略数字,然后将其平均,四舍五入,然后转换回日期。

  • 问题内容: 我有一列的数据像 我需要编写一个SQL查询/过程,这将有助于我获取日期之间差异的平均值。对于上面的示例,它将是 (19 + 8 + 10)/3=12.33。 请提供帮助。 在此先感谢Geetha 问题答案: 我不知道您的RDBMS,但这是来自SQL Server。另外,您的计算之一是错误的-02/09/2011-13/08/2011是20,而不是19。 产生的结果是12.667:(20

  • 问题内容: 如何在MySQL中的日期之间取平均值?我对时间值,小时和分钟更感兴趣。 在具有以下内容的桌子上: 进行如下查询: 编辑: 的作品,但我不知道它是什么返回数据。 问题答案: 这似乎有点骇人听闻,但适用于1970年〜1970年和2030年之间的日期(在32位元弓上)。您实际上是在将日期时间值转换为整数,对其求平均,然后将平均值转换回日期时间值。 可能有更好的解决方案,但这会帮助您紧要关头。

  • 我想用QueryDSL表达以下(Oracle)查询: 即。我想做日期算术。不幸的是,(由返回)不包含任何用于加减法的方法,仅用于比较(如或)。 我找到了,但也没有任何帮助。 是我遗漏了什么,还是QueryDSL不支持日期算术?