declare @Summary table
(
snapshotId int,
asOfDate int,
loadTime datetime
)insert into @Summary values(1,'20091201','2009-12-01 00:00:00')
insert into @Summary values(2,'20091201','2009-12-01 02:00:00')
insert into @Summary values(3,'20091201','2009-12-01 03:00:00')
insert into @Summary values(4,'20091202','2009-12-02 02:00:00')
insert into @Summary values(5,'20091203','2009-12-03 03:00:00')
insert into @Summary values(6,'20091205','2009-12-05 00:00:00')
insert into @Summary values(7,'20091205','2009-12-05 03:00:00')select * from @Summary这样的,我入参是两个date,刚才发现一条一条查太慢了,能一起查出来吗?情况是一样的:
我要查@Summary表,入参是一个时间,判断是否与asOfDate相等, 
如果有,取loadTime最大的那一条记录,如果没有,取本表里面loadTime最大的记录 例如入参20091201,则为    3,'20091201','2009-12-01 03:00:00' 这条 
再如20091204,则为 7,'20091205','2009-12-05 03:00:00' 这条 
再如20091206,也为 7,'20091205','2009-12-05 03:00:00' 这条比如startDate='20091201' ,endDate='20091206',则记录为3,'20091201','2009-12-01 03:00:00'
4,'20091202','2009-12-02 02:00:00'
5,'20091203','2009-12-03 03:00:00'
7,'20091205','2009-12-05 03:00:00'
7,'20091205','2009-12-05 03:00:00'
7,'20091205','2009-12-05 03:00:00'
如果入参时间有周末,可能要排除掉,这个暂时不考虑,再说。
原贴:http://topic.csdn.net/u/20091215/20/5ed9f745-b8db-49d4-8438-848848fa6d22.html?seed=50783113&r=61941103#r_61941103

解决方案 »

  1.   


    select *
    from ta a
    where not exists(select 1 from ta where a.asofdate = asofdate and snapshotid > a.snapshotid)
      

  2.   

    declare @Summary table
    (
    snapshotId int,
    asOfDate int,
    loadTime datetime
    )insert into @Summary values(1,'20091201','2009-12-01 00:00:00')
    insert into @Summary values(2,'20091201','2009-12-01 02:00:00')
    insert into @Summary values(3,'20091201','2009-12-01 03:00:00')
    insert into @Summary values(4,'20091202','2009-12-02 02:00:00')
    insert into @Summary values(5,'20091203','2009-12-03 03:00:00')
    insert into @Summary values(6,'20091205','2009-12-05 00:00:00')
    insert into @Summary values(7,'20091205','2009-12-05 03:00:00')select * from @Summary
    select * from @Summary t
    where not exists(select 1 from @Summary where asOfDate=t.asOfDate and loadTime>t.loadTime and asOfDate between '20091201' and '20091206')
    snapshotId asOfDate loadTime
    3 20091201 2009-12-01 03:00:00.000
    4 20091202 2009-12-02 02:00:00.000
    5 20091203 2009-12-03 03:00:00.000
    7 20091205 2009-12-05 03:00:00.000
      

  3.   

    declare @Summary table
    (
    snapshotId int,
    asOfDate varchar(10),
    loadTime datetime
    )insert into @Summary values(1,'20091201','2009-12-01 00:00:00')
    insert into @Summary values(2,'20091201','2009-12-01 02:00:00')
    insert into @Summary values(3,'20091201','2009-12-01 03:00:00')
    insert into @Summary values(4,'20091202','2009-12-02 02:00:00')
    insert into @Summary values(5,'20091203','2009-12-03 03:00:00')
    insert into @Summary values(6,'20091205','2009-12-05 00:00:00')
    insert into @Summary values(7,'20091205','2009-12-05 03:00:00')--select * from @Summarydeclare @startDate datetime, @endDate datetime
    set @startDate='20091201'
    set @endDate='20091206'
    select
     * 
    from
     @Summary t
    where
     not exists(select 1 from @Summary where asOfDate=t.asOfDate and loadTime>t.loadTime and asOfDate between @startDate and @endDate)
    /*snapshotId  asOfDate   loadTime
    ----------- ---------- -----------------------
    3           20091201   2009-12-01 03:00:00.000
    4           20091202   2009-12-02 02:00:00.000
    5           20091203   2009-12-03 03:00:00.000
    7           20091205   2009-12-05 03:00:00.000(4 行受影响)
    */
      

  4.   


    是这样,1~6号的日期,如果没有找到匹配的,需要补一条本表最大loadTime的记录因此,如果查1~6号,应当是6条记录
      

  5.   


    一个时间段求区间的,没有该记录则补上最大loadTime日期的记录