首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么实现这样一个SQL查询

2012-12-25 
如何实现这样一个SQL查询?本帖最后由 chaidaxia 于 2012-11-24 11:18:00 编辑各位高人,目前有下表 Num Nam

如何实现这样一个SQL查询?
本帖最后由 chaidaxia 于 2012-11-24 11:18:00 编辑 各位高人,目前有下表

 Num Name Date
  01 张三 20021102
  02 李四 20021101
  03 赵武 20021103
  03 赵武 20021123

要实现的结果是,根据SQL选出有记录的人员的最后一个日期的信息。对于上表中,要实现的查询结果就是:

 01 张三 20021102
 02 李四 20021101
 03 赵武 20021123

用SQL如何实现?请教大侠们!分不多,请各位帮忙了
[最优解释]

引用:
引用:access中这样应该是可以的吧?

SQL code?12345678910declare @T table (Num varchar(2),Name varchar(4),Date datetime)insert into @Tselect '01','张三','20021102' union allselect '02'……



select * from @T t
where Date=(select max(Date) from @T where Num=t.Num and Name=t.Name
and Date between '20021101' and '20021111')

[其他解释]

with tb(Num, Name, Date)
as(
select '01', '张三', 20021102 union all
select '02', '李四', 20021101 union all
select '03', '赵武', 20021103 union all
select '03' ,'赵武', 20021123
)select Num,Name,max(Date) from tb group by Num,Name  order by Num

[其他解释]

IF ( object_id('a') is not null ) DROP TABLE a 
GO
CREATE TABLE a    
(      
 num varchar(2),
 [name] varchar(4),
 date datetime
)
go
insert into a
select '01','张三','20021102' union all
select '02','李四','20021101' union all
select '03','赵武','20021103' union all
select '03','赵武','20021123'
go

select num as '编号',[name] as '名字',max(date) as '日期'
from a
group by num,[name]
/*
编号   名字   日期
---- ---- -----------------------
02   李四   2002-11-01 00:00:00.000
01   张三   2002-11-02 00:00:00.000
03   赵武   2002-11-23 00:00:00.000

(3 行受影响)
*/


[其他解释]

max() 取最大的
[其他解释]
select num,name,max(date) from querytable group by num,name
[其他解释]
引用:
SQL code?123456789101112131415161718192021222324252627282930IF ( object_id('a') is not null ) DROP TABLE a GOCREATE TABLE a    (       num varchar(2), [name] varchar(4), date datetime)goi……


兄台,倘若条件在复杂一点。比如如何选出介于某个时间段之间的最后一个日期的信息。比如:
Num Name Date
  01 张三 20021102
  02 李四 20021101
  02 李四 20021110


  03 赵武 20021103
  03 赵武 20021123
  03 赵武 20021124
  03 赵武 20021110 
选出介于20021101和20021111之间的最大的那个信息,结果应该是:
  01 张三 20021102
 02 李四 20021110
 03 赵武 20021110 
[其他解释]
另外,各位高人,貌似sql Server中没有问题,Access中出现“试图执行的查询中不包含作为聚合函数一部分的表达式。。”
[其他解释]
聚合不行,那就不用group。使用以下:


select num,name,date
from (
select *,ps=row_number()over(partition by num order by date desc) 
 from tablename
)a where a.ps=1


[其他解释]
access中这样应该是可以的吧?


declare @T table (Num varchar(2),Name varchar(4),Date datetime)
insert into @T
select '01','张三','20021102' union all
select '02','李四','20021101' union all
select '03','赵武','20021103' union all
select '03','赵武','20021123'

select * from @T t
where Date=(select max(Date) from @T where Num=t.Num and Name=t.Name)


把@T 直接换成表名试试。
[其他解释]
引用:
access中这样应该是可以的吧?

SQL code?12345678910declare @T table (Num varchar(2),Name varchar(4),Date datetime)insert into @Tselect '01','张三','20021102' union allselect '02','李四','20021101' unio……


兄台,请看一下5楼的问题
[其他解释]
二楼的,就行啦。
[其他解释]
Maco版主牛人,多谢!

热点排行