读书人

!请教这个查询语句如何写从多条相同

发布时间: 2012-01-16 23:36:51 作者: rapoo

紧急求助!!请问这个查询语句怎么写,从多条相同的数据选取第一条?
01 2005-4-20 12:01:43 3.57
01 2005-4-20 13:01:43 3.36
01 2005-4-20 13:01:44 3.57
01 2005-4-20 14:01:43 3.29

01 2005-4-21 0:01:44 3.55
01 2005-4-21 0:01:45 3.45
01 2005-4-21 1:01:44 3.49
01 2005-4-21 1:01:45 3.55

02 2005-4-22 0:01:45 3.96
02 2005-4-22 0:01:46 4.16
02 2005-4-22 1:01:45 3.93
02 2005-4-22 1:01:46 3.96

02 2005-4-23 17:01:47 4.95
02 2005-4-23 18:01:46 5.18
02 2005-4-23 18:01:47 4.86
02 2005-4-23 19:01:46 5.16


我想要的查询结果是:

01 2005-4-20 12:01:43 3.57
01 2005-4-21 0:01:44 3.55
02 2005-4-22 0:01:45 3.96
02 2005-4-23 17:01:47 4.95

也就是只要每个日期的第一条数据,希望各位高手帮忙!


------解决方案--------------------


Try:
我假设你表中的字段分别为 ID,Date,time

select * from [table] a
where not exists(select 1 from table where ID=a.ID and [date] <a.[date])
order by ID

[解决办法]
create table T(A varchar(10), B datetime, C decimal(10,2))
insert T select '01 ', '2005-4-20 12:01:43 ', 3.57
union all select '01 ', '2005-4-20 13:01:43 ', 3.36
union all select '01 ', '2005-4-20 13:01:44 ', 3.57
union all select '01 ', '2005-4-20 14:01:43 ', 3.29

union all select '01 ', '2005-4-21 0:01:44 ', 3.55
union all select '01 ', '2005-4-21 0:01:45 ', 3.45
union all select '01 ', '2005-4-21 1:01:44 ', 3.49
union all select '01 ', '2005-4-21 1:01:45 ', 3.55

union all select '02 ', '2005-4-22 0:01:45 ', 3.96
union all select '02 ', '2005-4-22 0:01:46 ', 4.16
union all select '02 ', '2005-4-22 1:01:45 ', 3.93
union all select '02 ', '2005-4-22 1:01:46 ', 3.96

union all select '02 ', '2005-4-23 17:01:47 ', 4.95
union all select '02 ', '2005-4-23 18:01:46 ', 5.18
union all select '02 ', '2005-4-23 18:01:47 ', 4.86
union all select '02 ', '2005-4-23 19:01:46 ', 5.16

select * from T as tmp
where not exists(select 1 from T where
convert(char(10), B, 120)=convert(char(10), tmp.B, 120) and B <tmp.B)

--result
A B C
---------- ------------------------------------------------------ ------------
01 2005-04-20 12:01:43.000 3.57
01 2005-04-21 00:01:44.000 3.55
02 2005-04-22 00:01:45.000 3.96
02 2005-04-23 17:01:47.000 4.95

(4 row(s) affected)


[解决办法]
create table T(A varchar(10), B datetime, C decimal(10,2))
insert T select '01 ', '2005-4-20 12:01:43 ', 3.57
union all select '01 ', '2005-4-20 13:01:43 ', 3.36
union all select '01 ', '2005-4-20 13:01:44 ', 3.57
union all select '01 ', '2005-4-20 14:01:43 ', 3.29

union all select '01 ', '2005-4-21 0:01:44 ', 3.55
union all select '01 ', '2005-4-21 0:01:45 ', 3.45
union all select '01 ', '2005-4-21 1:01:44 ', 3.49
union all select '01 ', '2005-4-21 1:01:45 ', 3.55

union all select '02 ', '2005-4-22 0:01:45 ', 3.96
union all select '02 ', '2005-4-22 0:01:46 ', 4.16
union all select '02 ', '2005-4-22 1:01:45 ', 3.93
union all select '02 ', '2005-4-22 1:01:46 ', 3.96

union all select '02 ', '2005-4-23 17:01:47 ', 4.95
union all select '02 ', '2005-4-23 18:01:46 ', 5.18


union all select '02 ', '2005-4-23 18:01:47 ', 4.86
union all select '02 ', '2005-4-23 19:01:46 ', 5.16

select A,B,C from T a
where B= ( select top 1 B from T b
where substring(cast(a.B as varchar),1,9)=substring(cast(b.B as varchar),1,9) )

结果
(所影响的行数为 16 行)

A B C
---------- ------------------------------------------------------ ------------
01 2005-04-20 12:01:43.000 3.57
01 2005-04-21 00:01:44.000 3.55
02 2005-04-22 00:01:45.000 3.96
02 2005-04-23 17:01:47.000 4.95

(所影响的行数为 4 行)
[解决办法]
假设你表中的字段分别为 ID,Date,time,表名是table

with t as(select *,row_number() over(partition by convert(varchar,Date,112) order by Date ) Bank from table)
select ID,Date,time from t where Bank=1
[解决办法]
if object_id( 'pubs..tb ') is not null
drop table tb
go

create table tb(id varchar(10),dt datetime,value decimal(18,2))
insert into tb(id,dt,value) values( '01 ', '2005-4-20 12:01:43 ', 3.57)
insert into tb(id,dt,value) values( '01 ', '2005-4-20 13:01:43 ', 3.36)
insert into tb(id,dt,value) values( '01 ', '2005-4-20 13:01:44 ', 3.57)
insert into tb(id,dt,value) values( '01 ', '2005-4-20 14:01:43 ', 3.29)
insert into tb(id,dt,value) values( '01 ', '2005-4-21 0:01:44 ', 3.55)
insert into tb(id,dt,value) values( '01 ', '2005-4-21 0:01:45 ', 3.45)
insert into tb(id,dt,value) values( '01 ', '2005-4-21 1:01:44 ', 3.49)
insert into tb(id,dt,value) values( '01 ', '2005-4-21 1:01:45 ', 3.55)
insert into tb(id,dt,value) values( '02 ', '2005-4-22 0:01:45 ', 3.96)
insert into tb(id,dt,value) values( '02 ', '2005-4-22 0:01:46 ', 4.16)
insert into tb(id,dt,value) values( '02 ', '2005-4-22 1:01:45 ', 3.93)
insert into tb(id,dt,value) values( '02 ', '2005-4-22 1:01:46 ', 3.96)
insert into tb(id,dt,value) values( '02 ', '2005-4-23 17:01:47 ', 4.95)
insert into tb(id,dt,value) values( '02 ', '2005-4-23 18:01:47 ', 4.86)
insert into tb(id,dt,value) values( '02 ', '2005-4-23 19:01:46 ', 5.16)
go
select a.* from tb a,
(select id,convert(varchar(10),dt,120) rq,min(dt) dt from tb group by id,convert(varchar(10),dt,120)) b
where a.id = b.id and a.dt = b.dt

drop table tb

/*
id dt value
---------- ------------------------------------------------------ --------------------
01 2005-04-20 12:01:43.000 3.57
01 2005-04-21 00:01:44.000 3.55
02 2005-04-22 00:01:45.000 3.96
02 2005-04-23 17:01:47.000 4.95

(所影响的行数为 4 行)

*/

读书人网 >SQL Server

热点推荐