一个SQL语句,害我想了半天没成功,麻烦下高手

kenny8023 2006-10-22 02:56:52
我有一个表:
ID 科目 最高成绩 考试日期

01 语文 80 2006-10-11
02 语文 74 2006-10-13
03 语文 88 2006-09-22
04 数学 95 2006-10-12
05 数学 98 2006-10-17
06 外语 93 2006-09-22
07 外语 96 2006-10-09

表如上: 我想取出各科成绩中离今天最近的一条,查询后效果如下:
ID 科目 最高成绩 考试日期

02 语文 74 2006-10-13
05 数学 98 2006-10-17
07 外语 96 2006-10-09

SQL语句怎么写呢,我用了很多方法都没能实现,大家知道的帮小弟一下
...全文
170 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kknd2005 2006-10-22
  • 打赏
  • 举报
回复
子查询就可以了,子查询中查MAX(日期)
vbman2003 2006-10-22
  • 打赏
  • 举报
回复
select ID,a.科目,最高成绩,考试日期
from table a ,(select 科目,MAX(考试日期) as mDate from table gorup by 科目) b
where a.科目=b.科目 and a.考试日期= b.mDate
vbman2003 2006-10-22
  • 打赏
  • 举报
回复
select ID,a.科目,最高成绩,考试日期
from table a ,(select 科目,MAX(考试日期) as mDate from table gorup by 科目) b
where a.科目=b.科目 and a.考试日期= b.Date
yiyefuping 2006-10-22
  • 打赏
  • 举报
回复
SELECT *
FROM 表
WHERE (考试日期 IN
(SELECT MAX(考试日期)
FROM 表
GROUP BY 科目))

---------------------------------------------
正解。
zsl5305256 2006-10-22
  • 打赏
  • 举报
回复
select a.*
from @table a
inner join (
select 科目,max(考试日期) as 考试日期 from @table
group by 科目
) b on b.[科目]=a.[科目] and a.[考试日期]=b.[考试日期]
tianzhenjing 2006-10-22
  • 打赏
  • 举报
回复
SELECT *
FROM 表
WHERE (考试日期 IN
(SELECT MAX(考试日期)
FROM 表
GROUP BY 科目))
Toti 2006-10-22
  • 打赏
  • 举报
回复
SELECT *
FROM 表
WHERE (考试日期 IN
(SELECT MAX(a.考试日期) AS 考试日期
FROM 表 AS a
GROUP BY a.科目))
Wangzhaokang 2006-10-22
  • 打赏
  • 举报
回复
SELECT ID,科目,最高成绩,MAX(考试日期) AS 考试日期 FROM 表名
GROUP BY 科目
ORDER BY 考试日期 DESC
这样就可以了
wj021chen 2006-10-22
  • 打赏
  • 举报
回复
select * from TalbeName Order by 最高成绩 desc,考试日期 desc
wj021chen 2006-10-22
  • 打赏
  • 举报
回复
select * from TalbeName 最高成绩 desc,考试日期 desc

------------------------大家看这样可以吗?
blackant2 2006-10-22
  • 打赏
  • 举报
回复
declare @table table(
[ID] char(2),
科目 nvarchar(2),
最高成绩 int,
考试日期 datetime
)

insert into @table
select '01', '语文', 80, '2006-10-11'
union select '02', '语文' ,74, '2006-10-13'
union select '03', '语文', 88, '2006-09-22'
union select '04', '数学', 95, '2006-10-12'
union select '05', '数学', 98, '2006-10-17'
union select '06', '外语', 93, '2006-09-22'
union select'07', '外语', 96, '2006-10-09'


select a.*
from @table a
inner join (
select 科目,max(考试日期) as 考试日期 from @table
group by 科目
) b on b.[科目]=a.[科目] and a.[考试日期]=b.[考试日期]

==假设科目和时间能惟一确定一条记录
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-10-22 02:56
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。