select * from tb2 tem where dt=(select max(dt) from tb2 where id=tem.id)

解决方案 »

  1.   

    select a.*,b.dt,b.val from tb1 a,(
    select * from tb2 tem where dt=(select max(dt) from tb2 where id=tem.id)) b where a.id=b.id
      

  2.   

    Select * from tb2  a where dt = (select max(dt) from tb2 where id=a.id))
      

  3.   

    select t2.id,t1.name,t2.dt,t2.val from tb1 t1,tb2 t2 where t2.id = t1.id and t2.dt = (select max(dt) from tb2 where tb2.id = t1.id);没调试,呵呵。
      

  4.   

    --这个应该没错啊.
    Select * from tb2  a where dt = (select max(dt) from tb2 where id=a.id))
      

  5.   

    这条语句绝对可以,先过滤,再内联
    select M.*,B.Name from (Tb2 as M 
          Inner Join (select max(DT) as X,ID as Y from Tb2 group by ID) as A ON M.ID=A.Y And M.DT=A.X)
          Left Join Tb1 as B On M.id=B.id
      

  6.   

    xiamen3611(菜鸟来了) :没取到数据啊!
      

  7.   

    --根据楼主需求,实现如下:CREATE TABLE tb1(
    [ID] CHAR(10)PRIMARY KEY NOT NULL,
    [Name] CHAR(40)NOT NULL)CREATE TABLE tb2(
    [ID] CHAR(10) NOT NULL,
    [DT] DATETIME NOT NULL,
    [VAL] CHAR(40) NOT NULL)
    GOALTER TABLE tb2 ADD CONSTRAINT [FK_tb2_tb1] FOREIGN KEY
    (
    [ID]
    )REFERENCES tb1
    (
    [ID]
    )
    GOINSERT INTO tb1
    VALUES ('001','股票1')INSERT INTO tb1
    VALUES('002','股票2')INSERT INTO tb1
    VALUES('003','股票3')GO
    INSERT INTO tb2
    VALUES ('001','20031010','10.00')INSERT INTO tb2
    VALUES('001','20031015','18.00')INSERT INTO tb2
    VALUES('002','20031010','4.00')INSERT INTO tb2
    VALUES('002','20031015','8.00')INSERT INTO tb2
    VALUES('003','20031009','20.00')INSERT INTO tb2
    VALUES('003','20031015','21.00')
    GOSELECT * FROM TB1 --查询结果如下:ID         Name                                     
    ---------- ------------------------------------
    001        股票1                                   
    002        股票2                                   
    003        股票3  SELECT * FROM TB2 --查询结果如下:ID         DT                          VAL                                      
    ---------- --------------------------  --------- 
    001        2003-10-10 00:00:00.000     10.00                                   
    001        2003-10-12 00:00:00.000     18.00                                   
    002        2003-10-10 00:00:00.000     4.00                                    
    002        2003-10-13 00:00:00.000     8.00                                    
    003        2003-10-09 00:00:00.000     20.00                                   
    003        2003-10-10 00:00:00.000     21.00        --取所有股票的最后一次成交时间和成交价的查询语句如下:SELECT [ID],[Name],[DT],[VAL] FROM(
    SELECT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT] IN(SELECT MAX(DT)FROM TB2 GROUP BY [ID])
    )AS YOURWANTID         Name      DT                      VAL    
    ---------- -------------------------------- ------
    001        股票1    2003-10-15 00:00:00.000  18.00 
    002        股票2    2003-10-15 00:00:00.000  8.00 
    003        股票3    2003-10-15 00:00:00.000  21.00(所影响的行数为 3 行)
      

  8.   

    不好意思,刚刚才测试完,数据还没完善就发了贴,这次的是经过测试的语句:SELECT DISTINCT [ID],[Name],[DT],[VAL] FROM(
    SELECT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT] IN(SELECT MAX(DT)FROM TB2 GROUP BY [ID])
    )AS YOURWANT
      

  9.   

    问题解决后另开贴给分(50)继续上面的问题:
    上面的返回集只包含了有成交价的股票,但我希望
    如果股票表tb1中某只股票在成交表tb2没有成交记录,返回的记录集中必须包含该股票记录,但最后一次成交时间为空
      

  10.   

    --好,再来
    --添加测试数据:
    INSERT TB1 SELECT '004','股票4'INSERT TB2([ID]) SELECT '004'    --该股票在成交表tb2没有成交记录GO--有成交价的记录SELECT DISTINCT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT]IN(SELECT MAX(DT)FROM TB2 GROUP BY[ID]) --没有成交价的记录SELECT DISTINCT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT]IS NULLGO--最终查询语句为:SELECT DISTINCT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT]IN(SELECT MAX(DT)FROM TB2 GROUP BY[ID]) 
    UNION
    SELECT DISTINCT A.[ID],[Name],[VAL],[DT]
    FROM TB1 A,TB2 B
    WHERE A.[ID]=B.[ID] AND [DT]IS NULLID  Name      VAL   DT                 
    ---- ------- ------ ------------- 
    001  股票1   18.00  2003-10-15 00:00:00.000
    002  股票2   8.00   2003-10-15 00:00:00.000
    003  股票3   21.00  2003-10-15 00:00:00.000
    004  股票4   NULL   NULL(所影响的行数为 4 行)