Id Code
1 1
2 2
3 3
上面是a表
Id Code State
1 1 A
2 1 B
3 1 C
4 3 A
5 2 A
6 2 B
7 3 B
8 3 A
此为b表 
我想取这样的数据
a.code b.state
1 C
2 B
3 A
b.state是与a表相同的code中id为最大的一条数据的state。
  请高人指教  谢谢

解决方案 »

  1.   

    ID号唯一:
    declare @tab table(Column1 int,Column2 varchar(20),Column3 datetime)
    insert @tab values(10,'am','1999-01-01')
    insert @tab values(11,'am','1999-01-02')
    insert @tab values(12,'bm','1999-01-03')
    insert @tab values(13,'bm','1999-01-04')
    insert @tab values(14,'cm','1999-01-05')
    insert @tab values(15,'cm','1999-01-06')SELECT * FROM @tab a WHERE 1>(SELECT COUNT(*) FROM @tab b WHERE a.Column3<b.Column3 and a.Column2=b.Column2)
      

  2.   

    USE PUBS
    GO
    if exists(select * from sysobjects where name='表A' and xtype='U') drop table 表A
    if exists(select * from sysobjects where name='表B' and xtype='U') drop table 表B
    GO
    --生成测试用数据,为SELECT初始环境
    CREATE TABLE 表A(ID int,Code Int)
    INSERT INTO 表A SELECT 1,1
    UNION ALL SELECT 2,2
    UNION ALL SELECT 3,3CREATE TABLE 表B(ID int,Code Int,State Varchar(10))
    INSERT INTO 表B SELECT 1,1,'A'
    UNION ALL SELECT 2,1,'B'
    UNION ALL SELECT 3,1,'C'
    UNION ALL SELECT 4,3,'A'
    UNION ALL SELECT 5,2,'A'
    UNION ALL SELECT 6,2,'B'
    UNION ALL SELECT 7,3,'B'
    UNION ALL SELECT 8,3,'A'select * from 表A
    select * from 表B
    GO
    --此处为用来查询的SELECT语句SELECT A.CODE,C.State 
    FROM 表A A INNER JOIN(
        SELECT * FROM 表B B WHERE ID=(SELECT MAX(ID) FROM 表B WHERE Code=B.Code)
        )C 
        ON A.Code=C.CodeGO
    --删除测试散数据
    DROP TABLE 表A,表B/* -- 结果 --CODE        State      
    ----------- ---------- 
    1           C
    2           B
    3           A(所影响的行数为 3 行)*/ -- 完成 --
      

  3.   

    上面的SELECT语句,你分开来看就很容易看懂..:
    1>第二个SELECT[子查询],你单独运行一下:
    SELECT * FROM 表B B WHERE ID=(SELECT MAX(ID) FROM 表B WHERE Code=B.Code)它的意思是取B表中,相同CODE的情况下,MAX最大的那条记录...2>放入到第一个子查询中,把上面的当做一个表..和A表联接--------------明白了吗?
      

  4.   

    YiZhiNet(YiZhi.Net)你是不是贴错地方了...?
      

  5.   

    同求解。
    2楼,加一句:
    insert @tab values(16,'am','1999-01-02')
    会出现选择两条记录的情况啊。
    而且这个查询覆效率等低,我用一个8000条左右记录的表做了一个测试,大概耗时4秒才能出结果。
      

  6.   

    记得你昨天还是前天问过这个问题。
    想要快点就用内连接。SELECT a.Code,b.ms FROM a表 a
    INNER JOIN
    (SELECT MAX(State) ms,Code FROM b表 GROUP BY Code) b
    ON a.Code=b.Code
      

  7.   

    SELECT a.Code,b.ms FROM a表 a
    INNER JOIN
    (SELECT MAX(State) ms,Code FROM b表 GROUP BY Code) b
    ON a.Code=b.Code
    正解,而且效率很好!
      

  8.   

    fcuandy(难道不做asp就失业??) 
    gaojier1000(青岛※高捷) 你们这样的写法,得出来的结果不符合Lz的要求,是错的。lz的要求为:
    --------------------------------------------------------
        state是与a表相同的code中id为最大的一条数据的state。你们上面的语句的结果为:Code        ms         
    ----------- ---------- 
    1           C
    2           B
    3           B跟题意不符,lz前几天是提了一个类似的,但是这次的要求跟上次是有所改动的..
      

  9.   

    SELECT a.Code,c.State
    FROM a表 a
    INNER JOIN
    (SELECT MAX(ID) mi,Code FROM b表 GROUP BY Code) b
    ON a.Code=b.Code
    INNER JOIN b表 c
    ON c.ID=b.mi
      

  10.   

    select c.code , c.state 
    from  (select a.code,b.state,b.id from a,b where a.code=b.code   order by b.id desc) as c group by c.code 
    这样写好象可以 大家看看
      

  11.   

    wwh999(印钞机V2.0...开发中....) 做的比较好了