请教一个查询
我现在需要查询一张表中根据Name在某个时间段内的最后一条记录
比方说有这样一张表
name value time
----------------
aaa 1 2005-05-1 09:30:20
bbb 2 2005-05-1 09:39:26
aaa 2 2005-05-1 09:39:50
ccc 3 2005-05-1 09:49:20
ddd 3 2005-05-1 09:59:20
aaa 1 2005-05-10 09:30:20
bbb 2 2005-05-10 09:39:26
aaa 2 2005-05-10 09:39:50
ccc 3 2005-05-10 09:49:20
fff 3 2005-05-10 09:59:20
当要查 2005-05-1 时应该返回为
name value time
----------------
bbb 2 2005-05-1 09:39:26
aaa 2 2005-05-1 09:39:50
ccc 3 2005-05-1 09:49:20
ddd 3 2005-05-1 09:59:20
查 2005-05-2 时返回 空
name value time
----------------
查 2005-05-10 时返回为
name value time
----------------
bbb 2 2005-05-10 09:39:26
aaa 2 2005-05-10 09:39:50
ccc 3 2005-05-10 09:49:20
fff 3 2005-05-10 09:59:20
我想了个笨办法,因为name是已知范围的,
就按name来查再把它们union到一块,可是未免太笨了些,不知有什么好办法吗
问题点数:20、回复次数:5Top
1 楼talantlee(小刀(bluedagger.cn))回复于 2005-05-11 16:35:07 得分 3
select name ,max(value), max(time) from 表 group by name
Top
2 楼wingswings(wings)回复于 2005-05-11 16:38:02 得分 0
可能是我没说明白,和value是无关的,再说明一下
需要查询一张表中根据Name在某个时间段内的最后一条记录
比方说有这样一张表
name value time
----------------
aaa 1 2005-05-1 09:30:20
bbb 1 2005-05-1 09:39:26
aaa 1 2005-05-1 09:39:50
ccc 1 2005-05-1 09:49:20
ddd 1 2005-05-1 09:59:20
aaa 1 2005-05-10 09:30:20
bbb 1 2005-05-10 09:39:26
aaa 1 2005-05-10 09:39:50
ccc 1 2005-05-10 09:49:20
fff 1 2005-05-10 09:59:20
当要查 2005-05-1 时应该返回为
name value time
----------------
bbb 1 2005-05-1 09:39:26
aaa 1 2005-05-1 09:39:50
ccc 1 2005-05-1 09:49:20
ddd 1 2005-05-1 09:59:20
查 2005-05-2 时返回 空
name value time
----------------
查 2005-05-10 时返回为
name value time
----------------
bbb 1 2005-05-10 09:39:26
aaa 1 2005-05-10 09:39:50
ccc 1 2005-05-10 09:49:20
fff 1 2005-05-10 09:59:20
如果查 所有 2005-05 则返回
name value time
----------------
ddd 1 2005-05-1 09:59:20
bbb 1 2005-05-10 09:39:26
aaa 1 2005-05-10 09:39:50
ccc 1 2005-05-10 09:49:20
fff 1 2005-05-10 09:59:20
我想了个笨办法,因为name是已知范围的,
就按name来查再把它们union到一块,可是未免太笨了些,不知有什么好办法吗Top
3 楼wingswings(wings)回复于 2005-05-11 16:42:56 得分 0
to talantlee:
我试过,如果这样查的话,value 和 time会对应不上的,错位了Top
4 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2005-05-11 17:26:52 得分 17
--建立测试环境
Create Table tanme(name varchar(10),value varchar(10),time varchar(100))
--插入数据
insert into tanme
select 'aaa','1','2005-05-1 09:30:20' union
select 'bbb','2','2005-05-1 09:39:26' union
select 'aaa','2','2005-05-1 09:39:50' union
select 'ccc','3','2005-05-1 09:49:20' union
select 'ddd','3','2005-05-1 09:59:20' union
select 'aaa','1','2005-05-10 09:30:20' union
select 'bbb','2','2005-05-10 09:39:26' union
select 'aaa','2','2005-05-10 09:39:50' union
select 'ccc','3','2005-05-10 09:49:20' union
select 'fff','3','2005-05-10 09:59:20'
select * from tanme
--测试语句
declare @adate datetime
set @adate = '2005-05-01'
print @adate
select * from tanme where time in (
Select max(time) from tanme where [time] >= convert(char(20),@adate,111) and [time] < convert(char(20),@adate+1,111)
group by name
)
and [time] >= convert(char(20),@adate,111) and [time] < convert(char(20),@adate+1,111)
--删除测试环境
Drop Table tanme
/*
--结果
05 1 2005 12:00AM
name value time
---------- ----------- ------------------------------------------------------
aaa 2 2005-05-01 09:39:50.000
bbb 2 2005-05-01 09:39:26.000
ccc 3 2005-05-01 09:49:20.000
ddd 3 2005-05-01 09:59:20.000
(所影响的行数为 4 行)
*/
Top
5 楼wingswings(wings)回复于 2005-05-11 17:33:17 得分 0
to comerliang(天地良心) :
谢谢,要的就是这个结果,原来 in 还有这个用法啊Top




