请教要实现这个查询的SQL语句怎么写啊?

来源:百度知道 编辑:UC知道 时间:2024/09/24 00:17:46
姓名 城市 性别 工资 日期
1 张三 深圳 男 1000 2005-1-1
2 张三 深圳 男 1500 2006-1-1
3 李四 上海 女 500 2005-1-1
4 李四 上海 女 1000 2007-1-1
5 李四 广州 女 1000 2004-1-1
6 王五 北京 男 1000 2005-1-1
这个表中,我想先按照姓名和城市分组,然后在每个组中筛选出距离目前日期最近的那条记录(以上要求都是在不知道具体的数据是什么的情况下进行查询).
所以结果应该是2,4,5,6这4条记录.
请问用一条SQL语句实现以上功能,这条语句应该怎么写啊?

Select [姓名], [城市], [性别], [工资], Max([日期]) From [表]
Group By [日期]

select a.* from 表 a left join (select 姓名,城市,max(日期) as 日期 from 表 group by 姓名,城市) b on a.姓名=b.姓名 and a.城市=b.城市 and a.日期=b.日期

select * from 表名 a,(SELECT [姓名],[城市],max([日期])as [日期]
FROM 表名 group by [姓名],[城市]) b
where a.姓名=b.姓名 and a.城市=b.城市 and a.日期=b.日期

SELECT * FROM (SELECT 姓名,城市,性别,工资,日期 ROW_NUMBER() OVER (PARTITION BY 姓名,城市 ORDER BY 日期 DESC) AS RN FROM TABLE1) WHERE RN=1

你看看日期排序方法对不对,不对用ORDER BY 日期 asc

不用看了这条语句是正确的,其他的都不知道写的人是怎么想的!!还有提问的表结构没写清楚,识别主键也没有,只能通过姓名 ,城市,日期来识别一条记录

select a.* from 表 a left join (select 姓名,城市,max(日期) as 日期 from 表 group by 姓名,城市) b on a.姓名=b.姓名 and a.城市=b.城市 and a.日期=b.日期