- 问题描述
对已有的统计数据,增加一个求两个时间差的列,要求
(1).查询结果增加一列
(2).结果是表中两个时间字段的差
(3).查询的时间差要在某一条件下
(4).对这个时间求平均值 - 解决思路
对原始的sql进行改造 知识点
ceil函数求两个时间的差,默认单位是天
CASE WHEN when model.a=’1’ THEN model.b END增加条件解决方法和注意问题
SELECT
model.p,
CAST( SUM(
CASE
WHEN model.a='1'
THEN (ceil((model.LASTDATE - model.STARTDATE)))
END) AS VARCHAR) as avgDate
FROM
MAIN model
WHERE
1=1
GROUP BY
model.p
注:select a, b, cast(null as varchar), d 是强制类型转换,将null转换为varchar,防止hibernate转换报错;model.LASTDATE是时间类型数据。
5. 总结
熟悉了ceil函数的应用,以及to_char,to_date函数,decode函数,case when 条件。以及cast( a AS VARCHAR)解决 hibernate执行原生sql报错: No Dialect mapping for JDBC type: 1111,的解决办法。