私は再び冬眠するのはかなり初めてなので、これは初歩的な質問かもしれません;)。
to_days がなくても、タイムスタンプでクラスター化すると、次のように機能します。
CriteriaQuery<Tuple> query = criteriaBuilder.createQuery(Tuple.class);
Root<Session> sessionRoot = query.from(Session.class);
query.multiselect(
sessionRoot.get("time").alias("time"),
criteriaBuilder.count(sessionRoot).alias("count")
);
query.groupBy(sessionRoot.get("time"));
List<Tuple> results = this.executeQuery(query);
だから私は受け取ります:
time|count
13721938721|1
13721938722|2
13721938723|3
13721938724|4
13721938725|2
13721938726|1
13721938727|4
しかし、これはすべてミリ秒ごとのセッション数ですが、タイムスタンプではなく日ごとにクラスター化されたものが必要です。したがって、プレーンな mysql で to_days を使用します。
mysql では、次のクエリを実行します。
SELECT TO_DAYS(`time`) AS `days`, COUNT(*) as `count` FROM sessions WHERE 1 GROUP BY `days`
これは私に与えます:
days|count
777594|123
777595|60
777596|61
777597|74
しかし、私にはまだわかりません。休止状態で javax.persistence.criteria.CriteriaBuilder と CriteriaQuery を使用して同じことを達成する方法は?