日期:2014-05-18  浏览次数:20782 次

怎么写每天前10名的SQL,高手进,在线等,急
我在写程序的时候,遇见个难题,就是需要从LOG表中取出每天前10名的记录,前提是,userid不能重复,也就这前10名里,只取每人当前最高的成绩~
表结构如下:

==========================
LOG表

CREATE   TABLE   [dbo].[T_LOG]   (
[logId]   [bigint]   IDENTITY   (1,   1)   NOT   NULL   ,
[userId]   [bigint]   NOT   NULL   ,
[userResult]   [int]   NOT   NULL   ,
[logIsShow]   [int]   NOT   NULL   ,
[logMsg]   [varchar]   (2048)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   , [logIP]   [varchar]   (15)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   , [logInsertDate]   [datetime]   NOT   NULL   ,
)   ON   [PRIMARY]   TEXTIMAGE_ON   [PRIMARY]

===================
用户表:


CREATE   TABLE   [dbo].[T_USER]   (
[userId]   [bigint]   IDENTITY   (1,   1)   NOT   NULL   ,
[userName]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[userCard]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[userCardType]   [int]   NOT   NULL   ,
[userPhone]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,
[userIsShow]   [smallint]   NOT   NULL   ,
[userInsertDate]   [datetime]   NOT   NULL   ,
)   ON   [PRIMARY]
==========================

user表与log表的关系是1对多的关系,我现在就是想把每天的前10名取出来,分数一样的插入时间早的排在前面也就是logInsertDate这个字段~

请高手指点,谢谢了,在线等ing....

------解决方案--------------------
select
t.*
from
T_LOG t
where
t.logId in(select
top 10 logId
from
T_LOG
where
datediff(dd,t.userInsertDate,userInsertDate)=0
order by
userResult desc,userInsertDate asc)
------解决方案--------------------
T_LOG t
t是T_LOG的别名,其实也相当于T_LOG.*
用别名主要是为了区分开子语句的T_LOG
如果仔细观察这条语句会发现有两个
from T_LOG
from T_LOG
为了好区分它们就在第一个from T_LOG加了个别名t
------解决方案--------------------
Declare @D Datetime
Set @D= '2007-08-01 '
Select Datediff(day,@D,Getdate()) As '@D与当前日期相差的天数 '
Select Datediff(month,@D,Getdate()) As '@D与当前日期相差的月数 '
Select Datediff(year,@D,Getdate()) As '@D与当前日期相差的年数 '
返回的结果是(第三个参数-第二个参数,第一个参数:指定哪一部分去计算)
------解决方案--------------------
分类取前N个记录的SQL语句

有一个表AAA,结构如下:
类别编号 说明 排序
a aa 1
a aa2 2
a aa3 3
b bb 1
b bb2 2
b bb3 3
c cc 1
c cc2 2
c cc3 3
需要查询出来的结果是每个类别的头2条记录,按排序进行排序,结果如下:
类别编号 说明 排序
a aa 1
a aa2 2
b bb 1
b bb2 2
c cc 1
c cc2 2
谢谢各位了!只要测试通过马上给分!


if object_id( 'pubs..t1 ') is not null
drop table t1
go

create table t1(
类别编号 varchar(10),
说明 varchar(10),
排序 int
)
insert into t1(类别编号,说明,排序) values( 'a ', 'aa ',1)
insert into t1(类别编号,说明,排序) values( 'a