У меня есть объект с объектом Date, представляющим последнее действие. Я хотел бы запросить среднее время простоя. Таким образом, в SQL-то вроде:Средняя разница в дате в QueryDSL
SELECT AVG(NOW() - idle_date) FROM mytable WHERE ....
Я пытался вычислить разницу так:
query.singleResult(
Expressions.dateOperation(
Long.class,
Ops.DateTimeOps.DIFF_SECONDS,
DateExpression.currentDate(),
myTable.idleDate
)
);
Но это не позволяет мне делать в среднем на результат, только мин и макс.
Как я могу выразить это среднее значение по разнице дат/времени (в секундах)?
Я использовал 'NumberTemplate.create (Double.class," {0} - {1} ", DateExpression.currentDate(), myTable.idleSince) .avg()' и это прекрасно работает. (Я взял на себя смелость отредактировать ваш комментарий, чтобы я мог отметить его как правильное решение) –
На самом деле, это не работает должным образом. Этот код дает числовой результат, но он не имеет смысла и, конечно же, не является числом секунд. Я попытался заменить {0} - {1} на TIMESTAMPDIFF (SECOND, {1}, {0}), но это не является выражением JPA и поэтому терпит неудачу. –
Является ли 'idleDate' представленным как' java.sql.Timestamp' или 'java.sql.Date'? Если это 'java.sql.Timestamp', есть' DateTimeExpression.currentDate() ', который может помочь. В качестве альтернативы, возможно, можно использовать 'DateTemplate' и обрабатывать результат, как только вы получите его на стороне Java. Извините, это не сработало. –