public List<TopUpRAMSInfo> listadoTOPUP2(Date fechaI, Date fechaF) {
List<TopUpRAMSInfo> lista;
CriteriaQuery<TopUpRAMSInfo> data = cb.createQuery(TopUpRAMSInfo.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.select(cb.construct(TopUpRAMSInfo.class,
c.get("deviceId"),
cb.sum(c.get("rechargeValue"))
)
);
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI),
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
);
data.groupBy(c.get("deviceId"));
TypedQuery<TopUpRAMSInfo> datos = emDAO.createQuery(data);
lista = datos.getResultList();
return lista;
}
public List<TopUpRAMS> listadoTOPUP2(Date fechaI, Date fechaF) {
List<TopUpRAMS> lista;
CriteriaQuery<TopUpRAMS> data = cb.createQuery(TopUpRAMS.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.multiselect(c.get("deviceId"), cb.sum(c.get("rechargeValue")));
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI));
cb.and(cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF));
data.groupBy(c.get("deviceId"));
TypedQuery<TopUpRAMS> datos = emDAO.createQuery(data);
lista = datos.getResultList();
return lista;
}
您如何构建标准中的WHERE部分存在问题。这个表达式是唯一被添加到WHERE子句中的表达式:
cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI)
但不是这个:
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
任何FF。可以解决这个问题:
data.where(cb.and(
cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI),
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
)
);
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI),
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
);
CriteriaQuery<Object[]> data = cb.createQuery(Object[].class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.multiselect(c.get("deviceId"), cb.sum(c.get("rechargeValue")));
CriteriaQuery类型将为元组
CriteriaQuery<Tuple> data = cb.createTupleQuery();
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.multiselect(c.get("deviceId"), cb.sum(c.get("rechargeValue")));
构造函数的使用
CriteriaQuery<TopUpRAMSInfo> data = cb.createQuery(TopUpRAMSInfo.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.select(cb.construct(TopUpRAMSInfo.class,
c.get("deviceId"),
cb.sum(c.get("rechargeValue"))
)
);
为此,您需要创建一个单独的类来表示查询结果的类型(它不必是实体):
public class TopUpRAMSInfo {
private Long deviceId;
private Double sumRechargeValue;
public TopUpRAMSInfo(Long deviceId, Double sumRechargeValue) {
this.deviceId = deviceId;
this.sumRechargeValue = sumRechargeValue;
}
...
}
public List<TopUpRAMSInfo> listadoTOPUP2(Date fechaI, Date fechaF) {
List<TopUpRAMSInfo> lista;
CriteriaQuery<TopUpRAMS> data = cb.createQuery(TopUpRAMSInfo.class);
Root<TopUpRAMS> c = data.from(TopUpRAMS.class);
data.select(cb.construct(TopUpRAMSInfo.class,
c.get("deviceId"),
cb.sum(c.get("rechargeValue"))
)
);
data.where(cb.greaterThanOrEqualTo(c.get("connectionTime"), fechaI),
cb.lessThanOrEqualTo(c.get("connectionTime"), fechaF)
);
data.groupBy(c.get("deviceId"));
TypedQuery<TopUpRAMSInfo> datos = emDAO.createQuery(data);
lista = datos.getResultList();
return lista;
}
问题内容: 请帮助我处理使用带有GROUP和SUM的LINQ进行查询的问题。 我希望: 从db.MYDATABASE中获取前25个项目 将所有结果按bs.PRODCODE分组 按每个bs的总和排序。 公司是“我的公司” 然后将数据管道到我的对象中 我很困惑,因为一旦我将其添加到混音中,我的变量就变得无用了。 问题答案: 我很困惑,因为一旦我将组添加到混合中,我的bs变量就变得无用了。 是的,因为您
我当前的jar在build中。gradle如下所示: 而且工作得很好。 然而,我有一个来自格雷德的消息(可能是从6号开始?) 这是实际消息: 零件<代码>配置。不推荐使用compile。 如何更新? 如果我改变了 Gradle说
问题内容: 我需要创建一个动态查询,其中条件将根据传入的请求更改,其中请求将始终通过查询参数获取。例子如下: http:// localhost:8084 / basePath?name = balwant&age = 26 ,或 http:// localhost:8084 / basePath?name = balwant&age = 26&gender = M 同样,它是动态的。现在,我需要
我需要扫描日志文件以找到一些子字符串。 如何在单个正则表达式中组合以下条件: 查找子字符串“AAA”、“BBB”、“CCC”,但 我尝试了类似(?DDD | EEE | FFF)(AAA | BBB | CCC)的东西,但没有成功。 Java模式类应该支持正则表达式语法。 非常感谢。
问题内容: 系列中的下一个’‘ This query is quite slow when the timestamps are chosen such that many rows are matched: 我相信这是因为我在两个字段(DeviceId和StartedAt)上混合了范围条件。 如果是这样,我该怎么办才能解决问题?也许有什么 触发索引合并的使用? 问题答案: 在=“范围”和“范围”
问题内容: 我有一个dbf,我想使用VB6复制到新的mdb中。 以下是我的专长,可以轻松地创建新的mdb,但是,我认为我可以使用INTO进行Select查询,以使用数据创建新表。 请注意:我假设的是在运行SQL查询时创建了MSAccess表。 我在FROM子句中收到语法错误。我试图做的是操纵此sql查询以执行我需要的操作: sql =“将INERT插入[Table1] SELECT * FROM