日期:2014-05-19  浏览次数:20433 次

一个数据库查询的问题
大家好,本人现在遇到数据库查询的问题,请大家帮我看看应该怎么写这条查询语句,谢谢!!!

有个表结构为

字段1         字段2
c                 2007/3/10  
c                 2007/4/10
a                 2007/4/10
a                 2007/4/10
b                 2007/4/10
b                 2007/4/10
b                 2007/4/10
d                 2007/4/10

请问如何通过查询得到下面的结果

字段1       字段2
b               2007/4/10
c               2007/3/10
a               2007/4/10
d               2007/4/10

就是说要先将字段1里值个数最多的进行排列,然后根据字段2的时间的先后去掉个数相同的值,最后形成第二个表结构??

------解决方案--------------------
Select 字段1,min(字段2) as 字段2
from 表 group by 字段1
Order by count(*) desc,min(字段2)
------解决方案--------------------
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(字段1 varchar(10),字段2 datetime )
insert into tb(字段1,字段2) values( 'c ', '2007/3/10 ')
insert into tb(字段1,字段2) values( 'c ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'a ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'a ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'b ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'b ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'b ', '2007/4/10 ')
insert into tb(字段1,字段2) values( 'd ', '2007/4/10 ')
go

select 字段1 , convert(varchar(10),min(字段2),120) 字段2 from tb group by 字段1 order by count(*) desc , 字段2

drop table tb

/*
字段1 字段2
---------- ----------
b 2007-04-10
c 2007-03-10
a 2007-04-10
d 2007-04-10

(所影响的行数为 4 行)
*/