大侠们:
我使用sql语句和后台程序代码统计航班数量,如果依据大于等于1的值做统计,他们两个得出的结果是一样的;如果依据0做统计,结果是不一样,谁知道怎么回事(0不是除数)?先谢谢各位了。。。
问题是:比如通过 sql语句统计的结果是60个,那么统计后台程序统计的就是67个,总之,如果依据0来统计,后台程序的结果就比sql语句的结果多几条数据。
我把统计使用的sql语句和核心代码都帖子下面了,如果有不明白的可以留言告诉我
我觉得问题出在时间的换算上
重要的代码是:
long diff = processTime.getTime()
- flight.getSTD().getTime();
int hoursDelayed = (int) (diff / (1000*60*60));
//根据延误的时间长短,与响应的条件进行比对
if (hoursDelayed >= ) {
count++;
}
processTime,它的值为系统当前时间
params.get("FDDT").getThreshold(),它的值为0
该处是统计数量的sql语句:
--数量统计是离港航班 延误 atd为null 过滤掉共享 当日航班 还有一个条件是:拿当前告警处理时间减去std,然后与fddt的时间进行比较
--下面是按照业务逻辑,书写的语句
select count(e.flight_no),e.operation_date,e.flight_no,
sysdate,e.std,
floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24) 小时,
floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60) 分钟,
(to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24
from epms_flight_info e
left join v_epms_flightinfo v
on e.operation_date=v.OPERATION_DATE and e.flight_no=v.FLIGHT_NO and e.aord=v.AORD and e.repeat_count=v.REPEAT_COUNT
where e.Recent_Abnormal_Status='D'
and e.ATD is null
AND e.AORD='D'
and v.CODE_SHARE1 is null
and e.std < to_date(to_char(sysdate+1, 'YYYYMMDD') || '040000', 'YYYYMMDDHH24MISS')
and
floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -
to_date(to_char(e.std,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24) >= 0
group by e.operation_date, e.flight_no, sysdate, e.std,
floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -
to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24),
floor((to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -
to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24*60),
(to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -
to_date(to_char(e.STD,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'))*24;
该处是统计数量的后台代码:
for (FlightInformation flight : Global.allCacheFlight) {
if (flight.getAbnormalStatus() == null)
continue;
if (flight.getArriveOrDeparture().equals("D")
&& flight.getAbnormalStatus().equals("D")
&& flight.getATD() == null) {
//依次判断航班是否延误
long diff = processTime.getTime()
- flight.getSTD().getTime();
int hoursDelayed = (int) (diff / (1000*60*60));
//根据延误的时间长短,与响应的条件进行比对
if (hoursDelayed >= params.get("FDDT").getThreshold()) {
count++;
}
}
}