上帝啊,救救我吧,明天就要交差啊,100分,不够再给

blue_bird3000 2003-08-19 04:49:15
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数据库,高手指点,感激不尽
...全文
56 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chawin 2003-08-20
  • 打赏
  • 举报
回复
假设表名为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
yangxjn 2003-08-20
  • 打赏
  • 举报
回复
select SEQ,G,DT,NAME,MON from yourTable
where...
group by G
hiflower 2003-08-19
  • 打赏
  • 举报
回复
SQL SERVER 写法
select * from ATable
where [dt]=(select max(dt) from ATable)
group by [group]
火龙岛主 2003-08-19
  • 打赏
  • 举报
回复
建议把子段名称改一下
SEQ group DT NAME MON
因为这些字段很有可能和系统关键字重复,命名的时候建议使用
诸如:ASEQ,AGroup ..之类的命名方法,或者把A换成有实际意义的单词或者简写!
查询不是很难,上面的大虾已经说了,我就不罗嗦了!

不过,还是要祝福一下!
:)
bluemeteor 2003-08-19
  • 打赏
  • 举报
回复
select seq,grup,dt,name from 表名 where dt=
(select max(dt)
from 表名
group by dt)
bluemeteor 2003-08-19
  • 打赏
  • 举报
回复
select seq,grup,dt,name from 表名 where dt=
(select max(dt)
from 表名
group by dt)
jpyc 2003-08-19
  • 打赏
  • 举报
回复
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。

夜o猫 2003-08-19
  • 打赏
  • 举报
回复
select name,max(mon)
from 表
group by name


上面的在MSSQ中通过,呵呵,只能这样了,没装ORACLE。
夜o猫 2003-08-19
  • 打赏
  • 举报
回复
哦,应该是没有重复的列了,再想想,可惜我这里没有ORACLE
cfancsl1 2003-08-19
  • 打赏
  • 举报
回复
select SEQ,G,DT,NAME,MON from yourTable
where...
group by name having max(dt)
charles2118 2003-08-19
  • 打赏
  • 举报
回复
group 是关键字 改成G
select SEQ,G,DT,NAME,MON from yourTable
where...
group by G
linuxyf 2003-08-19
  • 打赏
  • 举报
回复
bluecoffee1979(远程导弹)
兄弟,行不通啊,你这个出错,显示为“为单组分组函数”,
lw549 2003-08-19
  • 打赏
  • 举报
回复
没用过oracle,up
夜o猫 2003-08-19
  • 打赏
  • 举报
回复
你要的好像是以NAME字段分组吧

select seq,grup,dt,name,max(mon)
from 表
group by name
lw549 2003-08-19
  • 打赏
  • 举报
回复
没用过oracle,up
linuxyf 2003-08-19
  • 打赏
  • 举报
回复
怎么没人回答我呢?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧