有表MG,MG有MG001,MG002,MG003数据列。
MG001为币别,MG002为汇率日期,MG003为汇率。
表MG有数据如下:
MG001   MG002      MG003
NTD     20081001   1.000
NTD     20081011   1.374
USD     20070701   9.874
USD     20081010   8.800
HKD     20081001   6.700
HKD     20070102   8.900求查询所得数据为每种币别的最后一个汇率,结果如下:
MG001   MG002      MG003
NTD     20081011   1.374
USD     20081010   8.800
HKD     20081001   6.700求SQL语句写法,谢谢!

解决方案 »

  1.   

    --这样的例子很多了--生成测试数据         
    select 'NTD' MG001,'20081001' MG002,'1.000' MG003 into #t union all 
    select 'NTD','20081011','1.374' union all  
    select 'USD','20070701','9.874' union all  
    select 'USD','20081010','8.800' union all  
    select 'HKD','20081001','6.700' union all  
    select 'HKD','20070102','8.900'--查询
    select * from #t t where not exists(select * from #t where MG002>t.MG002 and MG001=t.MG001)/*结果
    MG001 MG002    MG003 
    ----- -------- ----- 
    NTD   20081011 1.374
    USD   20081010 8.800
    HKD   20081001 6.700
    */
      

  2.   

    select * from mg a where a.mg002 in (select max(b.mg002) from mg b   group by b.mg001)
      

  3.   


    DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
    INSERT INTO @MG
    SELECT 'NTD','20081001',1.000 UNION
    SELECT 'NTD','20081011',1.374 UNION
    SELECT 'USD','20070701',9.874 UNION
    SELECT 'USD','20081010',8.800 UNION
    SELECT 'HKD','20081001',6.700 UNION
    SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
    FROM @MG M INNER JOIN 
    (
    SELECT MG001,MAX(MG002) AS MG002
    FROM @MG
    GROUP BY MG001
    ) G
    ON M.MG002=G.MG002 AND M.MG001=G.MG001
      

  4.   


    DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
    INSERT INTO @MG
    SELECT 'NTD','20081001',1.000 UNION
    SELECT 'NTD','20081011',1.374 UNION
    SELECT 'USD','20070701',9.874 UNION
    SELECT 'USD','20081010',8.800 UNION
    SELECT 'HKD','20081001',6.700 UNION
    SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
    FROM @MG M INNER JOIN 
    (
    SELECT MG001,MAX(MG002) AS MG002
    FROM @MG
    GROUP BY MG001
    ) G
    ON M.MG002=G.MG002 AND M.MG001=G.MG001
      

  5.   


    DECLARE @MG TABLE(MG001 VARCHAR(10),MG002 DATETIME,MG003 NUMERIC(10,3))
    INSERT INTO @MG
    SELECT 'NTD','20081001',1.000 UNION
    SELECT 'NTD','20081011',1.374 UNION
    SELECT 'USD','20070701',9.874 UNION
    SELECT 'USD','20081010',8.800 UNION
    SELECT 'HKD','20081001',6.700 UNION
    SELECT 'HKD','20070102',8.900 SELECT M.MG001,CONVERT(varchar(10),M.MG002,112) AS MG002,MG003
    FROM @MG M INNER JOIN 
    (
    SELECT MG001,MAX(MG002) AS MG002
    FROM @MG
    GROUP BY MG001
    ) G
    ON M.MG002=G.MG002 AND M.MG001=G.MG001
      

  6.   

    select max(mg001),max(mg002),max(mg003) from #t group by mg001