从ASP.NET版块跑过来问的一个查询问题。
数据如下:
SELECT HistoryId,Score,CONVERT(VARCHAR(10),Add_Datetime,23)as 'Add_Date'
from Table Group by Add_Datetime
if object_id('[TB]') is not null drop table [TB]
go
create table [TB] (HistoryId int,Score int,Add_Date datetime)
insert into [TB]
select 1,12,'2013-01-02' union all
select 2,43,'2013-01-02' union all
select 3,50,'2013-01-02' union all
select 4,23,'2013-01-02' union all
select 5,89,'2013-01-03' union all
select 6,77,'2013-01-03' union all
select 7,63,'2013-01-03' union all
select 8,32,'2013-01-04' union all
select 9,90,'2013-01-04' union all
select 10,88,'2013-01-04'
select * from [TB]
--方法1
SELECT *
FROM dbo.TB B
WHERE NOT EXISTS(SELECT 1 FROM TB A WHERE A.add_date = B.add_date AND A.score>B.score)
/*
HistoryIdScoreAdd_Date
3502013-01-02 00:00:00.000
5892013-01-03 00:00:00.000
9902013-01-04 00:00:00.000*/
--方法2
SELECT historyid ,
score ,
add_date
FROM ( SELECT ROW_NUMBER() OVER ( PARTITION BY add_date ORDER BY score DESC ) AS NO ,
*
FROM dbo.TB
) A
WHERE no = 1