A1        A2             A3    A4       A5
        
        482 2011-05-27 1894 1 997
482 2011-05-27 1894 2 777
2154 2011-05-26 1889 1 9999
2154 2011-05-26 1890 1 1099
2154 2011-05-25 1839 1 100
482 2011-05-25 1887 1 9999
723 2009-12-10 1879 1 0.12
756 2009-12-10 1879 2 0.12
757 2009-12-10 1879 3 0.12        ...       ...            ...   ...        ...
        ...       ...            ...   ...        ...
        ...       ...            ...   ...        ...
        ...       ...            ...   ...        ... 请问如何查询出不同的A1   取A2 最大时的值,当A2相同时取A3最大,  当A3也相同时取A4最大的值最后结果是
    A1               A2              A3         A4       A5
    482         2011-05-27     1894 2 777
    2154        2011-05-26     1890 1 1099 
    723         2009-12-10     1879 1 0.12
    756   2009-12-10     1879 2 0.12
    757         2009-12-10     1879 3 0.12
     ...          ...                ...      ...        ...
     ...          ...                ...      ...        ...
     ...          ...                ...      ...        ...
     ...          ...                ...      ...        ...

解决方案 »

  1.   

    本帖最后由 roy_88 于 2011-05-27 18:07:26 编辑
      

  2.   

    select A1 , max(A2) as A2 , max(A3) as A3 , max(A4) as A4 , min(A5) as A5
    from tt
    group by A1
      

  3.   

    提示'row_number' 不是可以识别的 函数名
      

  4.   

    是SQL2000吧?這是2005以上版本可用==給你寫個2000的
      

  5.   

    use Tempdb
    go
    --> --> 
     
    if not object_id(N'Tempdb..#1') is null
    drop table #1
    Go
    Create table #1([A1] int,[A2] Datetime,[A3] Datetime,[A4] int,[A5] decimal(18,2))
    Insert #1
    select 482,'2011-05-27','1894',2,777 union all
    select 2154,'2011-05-26','1889',1,9999 union all
    select 2154,'2011-05-26','1890',1,1099 union all
    select 2154,'2011-05-25','1839',1,100 union all
    select 482,'2011-05-25','1887',1,9999 union all
    select 723,'2009-12-10','1879',1,0.12 union all
    select 756,'2009-12-10','1879',2,0.12 union all
    select 757,'2009-12-10','1879',3,0.12
    Go
    Select * 
    from #1 AS a
    WHERE 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2>a.A2 )
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3>a.A3)
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3=a.A3 AND A4>a.A4)
      

  6.   

    select 482,'2011-05-27','1894',2,777 union all
    select 2154,'2011-05-26','1889',1,9999 union all
    select 2154,'2011-05-26','1890',1,1099 union all
    select 2154,'2011-05-25','1839',1,100 union all
    select 482,'2011-05-25','1887',1,9999 union all
    select 723,'2009-12-10','1879',1,0.12 union all
    select 756,'2009-12-10','1879',2,0.12 union all
    select 757,'2009-12-10','1879',3,0.12
    这一部分很长很长可能有几万条,我难道都要输入么?可以省略么!我是菜鸟!
      

  7.   

    这个是测试数据 不需要输入 直接用这个查询Select * 
    from #1 AS a
    WHERE 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2>a.A2 )
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3>a.A3)
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3=a.A3 AND A4>a.A4)
      

  8.   

    Create table #1([A1] int,[A2] Datetime,[A3] Datetime,[A4] int,[A5] decimal(18,2))
    Insert #1
    select 482,'2011-05-27','1894',2,777 union all
    select 2154,'2011-05-26','1889',1,9999 union all
    select 2154,'2011-05-26','1890',1,1099 union all
    select 2154,'2011-05-25','1839',1,100 union all
    select 482,'2011-05-25','1887',1,9999 union all
    select 723,'2009-12-10','1879',1,0.12 union all
    select 756,'2009-12-10','1879',2,0.12 union all
    select 757,'2009-12-10','1879',3,0.12
    Go
    select a.* FROM #1 a, 
    (select A1,max(convert(varchar(8),A2, 112) + right('000000' + cast(A3 AS varchar(10)), 6) + right('000000' + cast(A4 AS varchar(10)), 6)) as maxa from #1 group by A1) b
    where a.A1 = b.A1 
    and convert(varchar(8),A2, 112) + right('000000' + cast(A3 AS varchar(10)), 6) + right('000000' + cast(A4 AS varchar(10)), 6) = b.maxa
      

  9.   

    Select * 
    from #1 AS a
    WHERE 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2>a.A2 )
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3>a.A3)
    AND 
    NOT EXISTS(SELECT 1 FROM #1 WHERE A1=a.A1 AND A2=a.A2 AND A3=a.A3 AND A4>a.A4)