3张表:
1. 表名[发电机列表]
发电机编号    使用地点2.表名[发电记录]
发电机编号   发电日期   发电时长3.表名[维护记录]
发电机编号  上次维护日期要求:得到所有发电机从上次维护后的发电总时长

解决方案 »

  1.   

    1. 表名[发电机列表] 
    发电机编号    使用地点 2.表名[发电记录] 
    发电机编号  发电日期  发电时长 3.表名[维护记录] 
    发电机编号  上次维护日期 
    --select a.*,sum(发电时长) as 发电总时长
    from 发电机列表 a
    left join 
    ( select * from 维护记录 b where not exists(select 1 from 维护记录 where 发电机编号 = b.发电机编号 and 上次维护日期> a.上次维护日期) c
    on a.发电机编号 = c.发电机编号
    left join 发电记录 d
    on a.发电机编号 = d.发电机编号
    where d.发电日期 >= c.上次维护日期
      

  2.   

    try--
    select  sum(发电时长)
    from 发电记录 t
    where not exists(select * from 维护记录 where 发电机编号=t.发电机编号 and 上次维护日期>t.发电日期)
      

  3.   

    select m.发电机编号 , isnull(n.总运行时间,0) 总运行时间 from 发电机列表 m
    left join
    (
      select a.发电机编号 , sum(a.发电时长) 总运行时间
      from 发电记录 a , 维护记录 b
      where a.发电机编号 = b.发电机编号 and a.发电日期 >= b.上次维护日期
      group by a.发电机编号
    ) n
    on m.发电机编号 = n.发电机编号
      

  4.   

    select m.发电机编号 , isnull(n.总运行时间,0) 总运行时间 from 发电机列表 m
    left join
    (
      select a.发电机编号 , isnull(sum(a.发电时长),0) 总运行时间
      from 发电记录 a left join 维护记录 b
      on a.发电机编号 = b.发电机编号 and a.发电日期 >= b.上次维护日期
      group by a.发电机编号
    ) n
    on m.发电机编号 = n.发电机编号
      

  5.   


    select sum(发电时长) as 发电时长
    from 发电记录 A
    inner join 维护记录 B
    on A.发电机编号 = B.发电机编号
    where 发电日期 > 上次维护日期
      

  6.   

    select a.[发电机编号],a.[使用地点],sum(b.[发电时长])
    from [发电机列表] a,[发电记录] b,[维护记录] c
    where a.[发电机编号]=b.[发电机编号] and
    a.[发电机编号]=c.[发电机编号] and b.[发电时间]>c.[上次维护日期]
    group by a.[发电机编号],a.[使用地点]