基本信息表A,其中信息编号唯一,并记录信息添加时间;反馈信息表B,其中反馈编号唯一,并记录对应信息编号,反馈时间。对于同一条信息,可有几条反馈信息。现在需要做的是,检查信息首次反馈时间(B表)与信息添加时间(A表)超过1小时的信息有哪些,同一条信息的第2次及以上的反馈信息不包括在内。这该怎么做?谢谢

解决方案 »

  1.   

    select a.信息编号,a.添加时间 from a,
       (select 信息编号,min(反馈时间) mintime from b
        group by 信息编号) v
    where a.信息编号=v.信息编号 and v.mintime-a.添加时间>1/24;
      

  2.   

    不太难,给出A表和B表的表结构select * 
      from A
     where exists (select 'X'
                     from B
                    where B.信息编号=A.信息编号
                          and B.反馈时间-A.反馈时间>1小时
                          and not exists (select 'X' 
                                            from B B2
                                           where B2.信息编号=B.信息编号
                                                 and B2.反馈时间<B.反馈时间
                                         ) 
                  )
      

  3.   

    --写一个,没有数据,未验证
    SELECT *
      FROM 基本信息表 c,
           (SELECT *
              FROM 反馈信息表 d
             WHERE EXISTS (SELECT 1
                      FROM (SELECT a.信息id, MIN(b.反馈时间) 反馈时间
                              FROM 基本信息表 a, 反馈信息表 b
                             WHERE a.信息id = b.信息id
                             GROUP BY a.信息Id) e
                     WHERE e.信息id = d.信息id AND
                           e.反馈时间 = e.反馈时间)) f
     WHERE a.信息id = b.信息id AND
           (a.增加时间 - b.反馈时间) > 1 / 24
      

  4.   

    --上面的别名有点问题,这个
    SELECT *
      FROM 基本信息表 c,
           (SELECT *
              FROM 反馈信息表 d
             WHERE EXISTS
             (SELECT 1
                      FROM (SELECT a.信息id, MIN(b.反馈时间) 反馈时间 FROM 反馈信息表 b GROUP BY a.信息Id) e
                     WHERE e.信息id = d.信息id AND
                           e.反馈时间 = d.反馈时间)) f
     WHERE c.信息id = f.信息id AND
           (f.反馈时间 - c.增加时间) > 1 / 24
      

  5.   


    select a.*,c.反馈编号,b.反馈时间
    from a,
    (select b.反馈编号,b.信息编号,b.反馈时间,rank() over(partition by b.信息编号 order by b.反馈时间 desc) rn
     from b
    ) c
    where rn=1 and a.信息编号=c.信息编号 and c.反馈时间-a.添加时间>1/24