SEQ      group          DT      NAME        MON
---------- ----------  ----------  -------- ----------
         1          3  05-5月 -80  zhangsan         10
         2          3  05-5月 -90  zhangsan         20
         3          3  05-5月 -00  zhangsan         30
         4          4  05-5月 -00  hanqin           30
         5          4  05-5月 -01  hanqin           40
         6          4  05-5月 -02  hanqin           50这是我的一个表,我想以group字段分组得到每一组中,年份最大的记录,如何写sql语句。比如如上数据,我要得到
       SEQ      group          DT      NAME        MON
---------- ----------  ----------  -------- ----------
         3          3  05-5月 -00  zhangsan         30
         6          4  05-5月 -02  hanqin           50我用的是oracle9数据库,高手指点,感激不尽

解决方案 »

  1.   

    你要的好像是以NAME字段分组吧select seq,grup,dt,name,max(mon)
    from 表
    group by name
      

  2.   

    bluecoffee1979(远程导弹) 
    兄弟,行不通啊,你这个出错,显示为“为单组分组函数”,
      

  3.   

    group 是关键字 改成G
    select SEQ,G,DT,NAME,MON from yourTable
    where...
    group by G
      

  4.   

    select SEQ,G,DT,NAME,MON from yourTable
    where...
    group by name having max(dt) 
      

  5.   

    哦,应该是没有重复的列了,再想想,可惜我这里没有ORACLE
      

  6.   

    select name,max(mon)
    from 表
    group by name
    上面的在MSSQ中通过,呵呵,只能这样了,没装ORACLE。
      

  7.   

    GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。以下示例返回分类 2 中每种产品已销售的单位数量:USE Northwind
    SELECT OrdD.ProductID AS ProdID,
    SUM(OrdD.Quantity) AS AmountSold
    FROM [Order Details] AS OrdD JOIN Products as Prd
    ON OrdD.ProductID = Prd.ProductID
    AND Prd.CategoryID = 2
    GROUP BY OrdD.ProductID下面是结果集:ProdID AmountSold 
    ----------- ----------- 
    3 328 
    4 453 
    5 298 
    6 301 
    8 372 
    15 122 
    44 601 
    61 603 
    63 445 
    65 745 
    66 239 
    77 791 (12 row(s) affected)GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项有一些限制。在该选择列表中所允许的项目是: 分组列。
    为分组列中的每个值只返回一个值的表达式,例如将列名作为其中一个参数的聚合函数。这些函数称为矢量聚合。 
    例如,TableX 包含:ColumnA ColumnB ColumnC 
    ------- ------- ------- 
    1 abc 5 
    1 def 4 
    1 ghi 9 
    2 jkl 8 
    2 mno 3 
    如果 ColumnA 是分组列,则结果集中将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。如果 ColumnA 是分组列,要引用 ColumnB 或 ColumnC,这两列必须能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式是合法的:SELECT ColumnA,
    MAX(ColumnB) AS MaxB,
    SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA该选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:ColumnA MaxB SumC 
    ----------- ---- ----------- 
    1 ghi 18 
    2 mno 11 (2 row(s) affected)但是,选择列表中只包含 ColumnB 表达式是不合法的:SELECT ColumnA,
    ColumnB,
    SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA由于 GROUP BY 关键字只能返回一行,该行 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 的三个值(abc、def 和 ghi)。不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING 子句,除非它们所在的函数返回的值具有其它数据类型。这样的函数包括 SUBSTRING 和 CAST。
      

  8.   

    select seq,grup,dt,name from 表名 where dt=
    (select max(dt)
    from 表名
    group by dt)
      

  9.   

    select seq,grup,dt,name from 表名 where dt=
    (select max(dt)
    from 表名
    group by dt)
      

  10.   

    建议把子段名称改一下
    SEQ      group          DT      NAME        MON
    因为这些字段很有可能和系统关键字重复,命名的时候建议使用
    诸如:ASEQ,AGroup ..之类的命名方法,或者把A换成有实际意义的单词或者简写!
    查询不是很难,上面的大虾已经说了,我就不罗嗦了!不过,还是要祝福一下!
    :)
      

  11.   

    SQL SERVER 写法
    select * from ATable
    where [dt]=(select max(dt) from ATable)
    group by [group]
      

  12.   

    select SEQ,G,DT,NAME,MON from yourTable
    where...
    group by G
      

  13.   

    假设表名为t1,表中的字段group另命名为teamid
    select a.*
    from t1 a ,
         (select teamid,max(dt) dt from t1 group by teamid) b
    where a.teamid=b.teamid and a.dt=b.dt