数据库里的时间字段存的是一个时间差,从19700101到当前时间的毫秒差(不知道为什么这么存)。
现在要求根据两个不同的字段generationtime,operationtime进行过滤,过滤出今天的统计数据。主要用到了以下几点:
1.时间差转为当前时间:
to_date('1970-01-01', 'yyyy-mm-dd HH24:mi:ss') +generationtime / (1000 * 60 * 60) / 24 + 8/24;
2.left join ;
3.行转列。
sql如下,自己记录一下,用作备忘:
select m.tot as total,
sum(case when t.status='在库' then 1 else 0 end ) as storage,
sum(case when t.status='已回收' then 1 else 0 end ) as recovery
from (
select count(innerid) tot from a
where to_date('1970-01-01', 'yyyy-mm-dd HH24:mi:ss') +generationtime / (1000 * 60 * 60) / 24 + 8/24 >= trunc(sysdate, 'dd')
and to_date('1970-01-01', 'yyyy-mm-dd HH24:mi:ss') +generationtime / (1000 * 60 * 60) / 24 + 8/24 < trunc(sysdate+1, 'dd')
) m
left join
(
select status from a
where to_date('1970-01-01', 'yyyy-mm-dd HH24:mi:ss') +operationtime / (1000 * 60 * 60) / 24 + 8/24 >= trunc(sysdate, 'dd')
and to_date('1970-01-01', 'yyyy-mm-dd HH24:mi:ss') +operationtime / (1000 * 60 * 60) / 24 + 8/24 < trunc(sysdate+1, 'dd')
) t
on 1=1
group by m.tot;
有更好的方法欢迎留言。