截取日期
trunc(sysdate,'mm'或者'dd'),sysdate只能为日期型,如果帆软返回值为字符串形式则要先做to_date处理,即,
where 1=1
and t2.CHECK_TIME <= TO_char(trunc(to_date('${End_Time}','yyyy-mm-dd hh24:mi:ss'),'dd')+7/24,'yyyy-mm-dd hh24:mi:ss')
返回当前月份的最后一天 select trunc(last_day(sysdate),'DD')+7/24 from dual
结果
select to_char(sysdate,'q') from dual;--取得当前时间的季度
sum ()over()累加
实现逐行累加
缺陷:遇到相同的数值时会将这些相同的数值看做一个组,一次性累加上组内所有相同值的和,例:
有数据列1,1,2,2,2,3,3 希望逐行累加结果为1,2,3,4,6,8,11,14
但是使用sum() over()仅能实现 2,2,8,8,8,14,14
解决办法:使用row_number over(order by)先给这列数据不重复排序,得到序列1.2.3.4.5.6.7
再按照次序列做sum (要求和的列)over(order by 序列)运算,即可得到预期结果
count 加条件
select count (*) from table_name where a.number=' 123 '
计算符合a.number=' 123 '的行数
count(1)、count(*)、count(column),都可以计算行数,一般使用:
select count(1) from table_name
两次检测查询
一个条码有两个检测时间,第二次检测会覆盖第一次检测,如果用时间排序则可以找到第一次检测,可以通过new_flag=0/1选中最新or初始的数据。
select * from mes.dc_dcs_bcheck bcheck
where 1=1
and bcheck.object_name = '2612105998'
group by 语句
如果group by 的一列,如date是完全一致的值,那么group by 将会把它拆解为与行数相等的不同值,分开计算,
如:
group by 第一列 production——shift,日期没有合并计算
但是 如果去掉这列的group by ,eqo列相等的相加