问个SQL语句问题

KenChan206 2010-05-17 10:17:20
有个表及数据如下:
Name Date
 A1 2009-1-1
A1 2010-5-10
A2 2009-2-1
A2 2009-10-1
A3 2009-4-1
A3 2010-5-1

现在想提取A1、A2、A3的最近日期的记录信息,应该如何写SQL语句?
也就是想得到这样的结果:
Name Date
A1 2010-5-10
A2 2009-10-1
A3 2010-5-1
...全文
207 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
DreamMan81 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chao3428 的回复:]
select name, max(date) as date
from biao
group by name
[/Quote]正解
liangpei2008 2010-05-28
  • 打赏
  • 举报
回复

//这样也行,只要你能理解相关子查询,方法有很多
SELECT *
FROM T1 A
WHERE ID IN (SELECT TOP 1 ID FROM T1 WHERE NAME=A.NAME ORDER BY DATE DESC)
liangpei2008 2010-05-28
  • 打赏
  • 举报
回复

SELECT *
FROM TABLE A
WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE NAME=A.NAME AND Date>A.DATE)
Harryfin 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 kenchan206 的回复:]
引用 10 楼 harryfin 的回复:
引用 9 楼 kenchan206 的回复:

不好意思,前几天没来结贴,再想问一下,如果表上不止这两列,例如是ID,NAME,DATE,People这几列,也是按照上面的要求写SQL语句,不过最后要显示所有列的,怎么写呢

还是按上述的思路先把最大的找出来,然后通过join来把其它信息join回来,join的条件就是你第一次子查询的返回的各字……
[/Quote]
name和date的组合是必定唯一的,否则你group by的时候就错了,或者说group by出来的根本不知道是哪条记录的最大值(假如出现同名情况下,最大值重复的情况)
dinoalex 2010-05-27
  • 打赏
  • 举报
回复
有ID很容易的

select * from yourtable
where id in (select a.id from yourtable a
inner join (select name, max(date) as date from yourtable group by name) b
on a.name = b.name and a.date = b.date)
KenChan206 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 harryfin 的回复:]
引用 9 楼 kenchan206 的回复:

不好意思,前几天没来结贴,再想问一下,如果表上不止这两列,例如是ID,NAME,DATE,People这几列,也是按照上面的要求写SQL语句,不过最后要显示所有列的,怎么写呢

还是按上述的思路先把最大的找出来,然后通过join来把其它信息join回来,join的条件就是你第一次子查询的返回的各字段。
[/Quote]但是join的条件条件有限,像用NAME和DATE做条件的话有可能存在相同的记录,不唯一
Harryfin 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kenchan206 的回复:]

不好意思,前几天没来结贴,再想问一下,如果表上不止这两列,例如是ID,NAME,DATE,People这几列,也是按照上面的要求写SQL语句,不过最后要显示所有列的,怎么写呢
[/Quote]
还是按上述的思路先把最大的找出来,然后通过join来把其它信息join回来,join的条件就是你第一次子查询的返回的各字段。
KenChan206 2010-05-27
  • 打赏
  • 举报
回复
不好意思,前几天没来结贴,再想问一下,如果表上不止这两列,例如是ID,NAME,DATE,People这几列,也是按照上面的要求写SQL语句,不过最后要显示所有列的,怎么写呢
JeffChung 2010-05-19
  • 打赏
  • 举报
回复
分多,题易,速来
wujinyuan 2010-05-19
  • 打赏
  • 举报
回复
用楼的。。日期型本来变是数字
yanele 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chao3428 的回复:]
select name, max(date) as date
from biao
group by name
[/Quote]
正解!
想到才能做到 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chao3428 的回复:]
select name, max(date) as date
from biao
group by name
[/Quote]

这个就行
无语孩童 2010-05-17
  • 打赏
  • 举报
回复
SELECT NAME,MAX(DATE) FROM TABLE_NAME GROUP BY NAME
winstonbonaparte 2010-05-17
  • 打赏
  • 举报
回复
用一樓的方法就行了。沒必要弄的這麼麻煩的。
zywuhao 2010-05-17
  • 打赏
  • 举报
回复
up,一楼正解!
Select name ,dateadd(day,-Min(DateDiff(day,date,getdate())),getdate()) as date from biao
group by name

哈哈,我是这样写的!!有点麻烦!
chao3428 2010-05-17
  • 打赏
  • 举报
回复
select name, max(date) as date
from biao
group by name

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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