关于利用存储过程统计网站注册数据的问题

我是丁学 2004-09-15 12:55:11
用户注册信息放在users表中,其中us_username字段是用户名,us_regtime字段是注册时间
现在要统计总注册用户数、30天内注册用户数、24小时内注册用户数和最后一个注册者的用户名
分别设为变量:@totalnum,@monthnum,@todaynum,@lastuser
我刚学,写出了下面的代码,估计是不对的,谁帮我改一下,还有就是需要判断是否有记录在表中,不然可能@lastuser会有问题:

create procedure pr_stat
(
@totalnum int=0,
@monthnum int=0,
@todaynum int=0,
@lastuser char=''
)
as
select @totalnum=count(*) from users
select @monthnum=count(*) from users where reg_time> DATEADD(day,30,getdate())
select @todaynum=count(*) from users where reg_time>dateadd(hour,24,getdate())
select top 1 @lastuser=us_username from users order by us_id desc
...全文
117 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是丁学 2004-09-15
  • 打赏
  • 举报
回复
谢谢上面两位的回复,不过如果数据表为空,没有记录的话,最后一个select会不会出错?

我曾经看见有人说,如果在在查询过程中对字段进行计算,那么将不会使用索引,执行效率会比较低,比如:
select * from table where fildes > value+4
select * from table where fildes-4 < value
第一句效率要比第二句好。
如果这样的话,是不是上面第二个回复会比第一个执行效率高呢?

[对sum()不熟,不知道是不是这样的]
gaodongsheng 2004-09-15
  • 打赏
  • 举报
回复
create procedure pr_stat

@totalnum int=0,
@monthnum int=0,
@todaynum int=0,
@lastuser varchar(50)=''

as
select @totalnum=count(*) from users
select @monthnum=count(*) from users where reg_time> DATEADD(day,-30,getdate())
select @todaynum=count(*) from users where reg_time>dateadd(hour,-24,getdate())
select top 1 @lastuser=us_username from users order by us_id desc --us_id是自增的
pbsql 2004-09-15
  • 打赏
  • 举报
回复
前三个可以写在一起:
select @totalnum=sum(1),
@monthnum=sum(case when DATEADD(day,reg_time,getdate())<=30 then 1 else 0 end),
@todaynum=sum(case when DATEADD(hour,reg_time,getdate())<=24 then 1 else 0 end)
from users

select @lastuser=us_username from users order by reg_time desc

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧