日期:2014-05-18  浏览次数:20419 次

如何写一段sql?
rego costcentername startdate enddate
AE70PV 51417 64702 2007-01-01 2007-09-17 
AE70PV 51417 34504 2007-09-18 2100-01-01 
AK11ZS 51417 34501 2007-01-01 2007-09-16 
AK11ZS 51417 XX198 2007-09-17 2100-01-01 
AK83HB 51417 66303 2007-02-27 2007-09-06 
AK83HB 51417 34504 2007-09-07 2100-01-01 
AM77KA 51417 34501 2007-01-01 2007-09-16 
AM77KA 51417 XX198 2007-09-17 2100-01-01 
AP32XJ 51417 27510 2007-06-28 2007-09-12 
AP32XJ 51417 XX232 2007-09-13 2007-09-25 
AP32XJ 51417 27510 2007-09-26 2100-01-01 
AP98XI 51417 64302 2007-06-29 2007-09-17 
AP98XI 51417 64702 2007-09-18 2100-01-01 
AQ23AY 51417 XX254 2007-07-14 2007-09-11 
AQ23AY 51417 27510 2007-09-12 2007-09-25 
AQ23AY 51417 27503 2007-09-26 2100-01-01 

这样一张表中如何通过sql语句把相同rego在指定时间段中所占天数多的数据提取出来(时间段为:2007.9.1~2007.9.30)
如:
rego为:AE70PV, 有两条记录,一条在指定时间段占了16天,一条占了14天,只要把占16天的数据取出就可以了
不知道有那位高手会写这样的sql,谢谢了

------解决方案--------------------
SQL code
select
    t.*
from
    表 t
where
    not exists(select 1 from 表 where rego=t.rego and datediff(dd,startdate,enddate)>datediff(dd,t.startdate,t.enddate))

------解决方案--------------------
select a.*
(
select * , datediff(day,startdate,enddate) 天数 from tb
) a,
(
select rego , max(天数) 天数 from 

select * , datediff(day,startdate,enddate) 天数 from tb
) t
group by rego
) b
where a.rego = b.rego and a.天数 = b.天数