所以我的查询参数只是日期范围。
示例参数为
startDateTime = '2018-01-10 00:00:00'
endDateTime = '2018-01-11 00:00:00'
按照该日期范围,我喜欢按日期范围内的小时对计数和金额进行分组,0
- 23
应该是小时的值。
所以下面是我的代码。
dc.add(Restrictions.ge("date", startDateTime));
dc.add(Restrictions.lt("date", endDateTime));
dc.setProjection(
Projections.projectionList()
.add(Projections.alias(Projections.sum("amount"), "amount"))
.add(
Projections.sqlProjection(
"Cast(Count(id) as Integer) count",
new String[]{"count"},
new Type[]{StandardBasicTypes.INTEGER})
)
.add(
Projections.sqlProjection(
"hour(date) as date",
new String[]{"date"},
new Type[]{StandardBasicTypes.INTEGER})
)
);
结果是这样的。
[
{
"amount": 0.1,
"count": 1,
"date": 3
},
{
"amount": 0.3,
"count": 1,
"date": 3
},
{
"amount": 1.5,
"count": 1,
"date": 11
},
{
"amount": 2.2,
"count": 1,
"date": 11
},
{
"amount": 0.6,
"count": 1,
"date": 11
}
]
知道怎么做吗?
最佳答案
您需要添加groupProperty
。我不确定参数
dc.add(Restrictions.ge("date", startDateTime));
dc.add(Restrictions.lt("date", endDateTime));
dc.setProjection(
Projections.projectionList()
.add(Projections.alias(Projections.sum("amount"), "amount"))
.add(
Projections.sqlProjection(
"Cast(Count(id) as Integer) count",
new String[]{"count"},
new Type[]{StandardBasicTypes.INTEGER})
)
.add(
Projections.groupProperty("hour(date)","date")
)
);
关于java - 使用按小时分组的 Hibernate 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48202991/