select count(*) from a,b where a.a_id=b.a_id and to_date(to_char(b.b_date,'yyyy-mm-dd')||to_char(b.b_time,' hh:mi'),'yyyy-mm-dd hh:mi')-a.a_time/24/60<sysdate;

解决方案 »

  1.   

    取出b_date的日期(2003-10-28)以及b_time的时间(例如08:15:00)组合成新的日期(2003-10-28 08:15:00)select to_char(b_date,' yyyy-mm-dd')||to_char(b_time,' HH24:MI:SS') nDate from b;
    --------------------------------------------------------------------------------然后减去与a_id相对应的a_timeselect to_char(to_date(to_char(b.b_date,'yyyy-mm-dd') || to_char(b.b_time,' hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')-1/(24*60)*(to_number(a.a_time)),'yyyy-mm-dd HH24:mi:ss') nDate from a,b where a.a_id = b.a_id;
    --------------------------------------------------------------------------------最后在与系统时间(sysdate)比较,算出小于系统时间的个数(count,此Select语句如何写?select count(*) from a,b where (a.a_id = b.a_id) and (to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') > to_char(to_date(to_char(b.b_date,'yyyy-mm-dd') || to_char(b.b_time,' hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')-1/(24*60)*(to_number(a.a_time)),'yyyy-mm-dd HH24:mi:ss'));
      

  2.   

    为了清晰写法~ 所以分了三部分~各部分说明的是:
    1. || 是连接符,连接左右两个字符串.
    2. 分析 to_date(...)-1/(24*60)*(to_number(a.a_time)) .
    to_date(...)-1 是一天前的日期.
    to_date(...)-1/24 是一小时前的日期.
    to_date(...)-1/(24*60) 是一分钟前的日期
    to_date(...)-1/(24*60)*(to_number(a.a_time)) 就是 a.a_time 分钟之前的日期了.3. 用了两个判断条件.(这个容易看的懂,就不详细了 ^_^)
      

  3.   

    呵呵... :-(
    建议使用  pengdali(大力 V3.0)  的方法~  因为简单,易懂~~我想应该是同时提交回复的吧~
    但和 SQL 高手一比,我差的远了.. 唉...惭愧ing... :-(
      

  4.   

    select b_id,a_id,
    sum(decode(sign(to_date(to_char(b_date,'yyyy-mm-dd')||to_char(b_time,'hh24:mi:ss'),'yyyy-mm-ddhh24:mi:ss')-(select a_time/(24*60) from a where a.a_id=b.a_id)-sysdate),-1,1,0)) count
    from b
      

  5.   

    to  beckhambobo(beckham):
    错误ORA-00937:非单组分组函数