我的实体类是
@Entity
@Table(name="SMSSalesData")
public class SMSSalesDataEntity implements Serializable{
@Id @GenericGenerator(name = "native_generator", strategy = "native")
@GeneratedValue(generator = "native_generator")
private Integer ID;
@Column(name="CMSCode", length=50)
private String cmsCode;
@Digits(integer = 18, fraction = 2)
@Column(name = "MSQty", precision = 20)
private Double msQty;
@Digits(integer = 18, fraction = 2)
@Column(name = "HSDQty", precision = 20)
private Double hsdQty;
@Digits(integer = 18, fraction = 2)
@Column(name = "LubesQty", precision = 20)
private Double lubesQty;
@Column(name = "MobileNo", length = 20)
private String mobileNo;
@Column(name = "MsgDatetime")
@Temporal(TemporalType.TIMESTAMP)
private Date msgDatetime;
@Column(name = "CreatedDatetime", length = 20)
private Date createdDatetime;
@Column(name = "shortcode", length = 20)
private String shortcode;
@Column(name = "productcode", length = 20)
private String productcode;
@Digits(integer = 18, fraction = 2)
@Column(name = "MSStock", precision = 20)
private Double msStock;
@Digits(integer = 18, fraction = 2)
@Column(name = "HSDStock", precision = 20)
private Double hsdStock;
我希望Hibernate查询此实体类,以msgDateTime按月和msgDateTime组的月份和年份获得MSQty的总和。
SELECT SUM(MSQty) as sum_ms_qty FROM SMSSalesData where MONTH(MsgDatetime)=10 and YEAR(MsgDatetime)=2014 GROUP BY MONTH(MsgDatetime) ;
以上是此MSQty获取总和的SQL查询。
你能为我提供hibernate或标准查询吗? 谢谢。
答案 0 :(得分:0)
在HQL中:
SELECT sum(SMSSalesDataEntity.MSQty) as sum_ms_qty
from SMSSalesDataEntity
WHERE month(SMSSalesDataEntity.msgDatetime)= 10 and year(SMSSalesDataEntity.msgDatetime) = 2014
GROUP BY month(SMSSalesDataEntity.msgDatetime)
HQL文档:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
dateadd和datediff 自定义函数需要根据您连接到 Date operations in HQL
的数据库添加SELECT SUM(MSQty) + SUM(HSDQty) FROM [essar].[dbo].[SMSSalesData] WHERE [MsgDatetime] < CURRENT_TIMESTAMP and [MsgDatetime] > DATEADD(Month, -6, CURRENT_TIMESTAMP) GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MsgDatetime), 0);
在HQL中:
SELECT SUM(SMSSalesDataEntity.MSQty) + SUM(SMSSalesDataEntity.HSDQty) FROM SMSSalesDataEntity
WHERE SMSSalesDataEntity.msgDatetime < CURRENT_TIMESTAMP AND SMSSalesDataEntity.msgDateTime >
DATEADD(MONTH, -6, CURRENT_TIMESTAMP) GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, SMSSalesDataEntity.msgDateTime), 0);