--现有一个表tab1,字段ccid(自增长),字段2 name --第二个表tab2,字段id(自增长), 外建字段2 ccid(可重复),字段3日期rateDate。--现求 查询表tab1,连接上tab2表, ccid 不重复的结果且 rateDate字段值,是 最大的。用存储过程
drop table tab1
drop table tab2create table tab1
(
ccid int identity(1,1),
name nvarchar(100)
)create table tab2
(
id int identity(1,1),
ccid int,
rateDate datetime
)
go
insert into tab1 values ('11111')
insert into tab1 values ('22222')
insert into tab1 values ('33333')
insert into tab1 values ('44444')
insert into tab1 values ('55555')
insert into tab1 values ('66666')insert into tab2 values (1,'2010-10-09')
insert into tab2 values (1,'2010-10-11')
insert into tab2 values (2,'2010-10-01')
insert into tab2 values (6,'2011-10-01')
insert into tab2 values (6,'2011-10-02')
insert into tab2 values (6,'2011-10-03')
select * from tab1
select * from tab2--结果应该是这样
name   ccid rateDate
11111 1  2010-10-11 00:00:00.000
22222   2   2010-10-01 00:00:00.000
66666   6   2011-10-03 00:00:00.000(这个日期值,在表tab2中,ccid为6的,最大的日期)

解决方案 »

  1.   


    create table tab1
    (
    ccid int identity(1,1),
    name nvarchar(100)
    )create table tab2
    (
    id int identity(1,1),
    ccid int,
    rateDate datetime
    )
    go
    insert into tab1 values ('11111')
    insert into tab1 values ('22222')
    insert into tab1 values ('33333')
    insert into tab1 values ('44444')
    insert into tab1 values ('55555')
    insert into tab1 values ('66666')insert into tab2 values (1,'2010-10-09')
    insert into tab2 values (1,'2010-10-11')
    insert into tab2 values (2,'2010-10-01')
    insert into tab2 values (6,'2011-10-01')
    insert into tab2 values (6,'2011-10-02')
    insert into tab2 values (6,'2011-10-03')
    goselect b.name,a.ccid,a.ratedate
    from (select ccid,max(ratedate)ratedate from tab2 group by ccid) as a
    left join tab1 b on a.ccid = b.cciddrop table tab1,tab2
    /*name                             ccid        ratedate
    ----------------------------- ----------- -----------------------
    11111                             1       2010-10-11 00:00:00.000
    22222                             2       2010-10-01 00:00:00.000
    66666                             6       2011-10-03 00:00:00.000(3 行受影响)
      

  2.   


    use tempdb;
    /*
    drop table tab1;
    drop table tab2;create table tab1
    (
    ccid int identity(1,1),
    name nvarchar(100)
    )create table tab2
    (
    id int identity(1,1),
    ccid int,
    rateDate datetime
    )insert into tab1 values ('11111')
    insert into tab1 values ('22222')
    insert into tab1 values ('33333')
    insert into tab1 values ('44444')
    insert into tab1 values ('55555')
    insert into tab1 values ('66666')insert into tab2 values (1,'2010-10-09')
    insert into tab2 values (1,'2010-10-11')
    insert into tab2 values (2,'2010-10-01')
    insert into tab2 values (6,'2011-10-01')
    insert into tab2 values (6,'2011-10-02')
    insert into tab2 values (6,'2011-10-03')
    */select tab1.name,tab2.ccid,MAX(tab2.rateDate) as [rateDate] 
    from tab2 
    left join tab1 
    on tab1.ccid = tab2.ccid
    group by tab1.name,tab2.ccid;
      

  3.   

    select * from tab1 a
    cross apply
    (select top(1) rateDate from tab2 where ccid = a.ccid order by rateDate desc) b
    /*
    ccid name rateDate
    1 11111 2010-10-11 00:00:00.000
    2 22222 2010-10-01 00:00:00.000
    6 66666 2011-10-03 00:00:00.000
    */