日期:2014-05-16  浏览次数:21041 次

[再次提问]文章统计:怎么样最近一周和所有文章数
一个文章系统,原来是统计每个管理员发文章的总数
我用的是下面的SQL

SELECT   top   7   count(articleid)   as   Counts,Editor
FROM   Admin   INNER   JOIN   Article   ON   Admin.UserName   =   Article.Editor  
where   Article.Passed=True  
group   by   Editor  
order   by   count(articleid)   desc

显示效果:

用   户   排   行  
 
名次 用户名   文章总数  
1     bobo           20  
2     xixi           10

现在要把名次的地方换成该用户最近一周的发文章数,效果如下:

 用户名     最近一周   文章总数  
      bobo           4               20  
      xixi           6               10

用下面的SQL可以实现查询最近一周每个用户的发文章数

SELECT   top   7   count(articleid)   as   Counts,Editor  
FROM   Admin   INNER   JOIN   Article   ON   Admin.UserName   =   Article.Editor  
where   Article.Passed=True   and   DateDiff( 'd ',UpdateTime,#2007-3-21#) <7
group   by   Editor  
order   by   count(articleid)   desc

可是怎么用一条语句实现?
-------------------------------
斑竹们给的办法
SELECT  
        top   7   count(articleid)   as   Counts,
        Editor   ,
        (select   count(*)   from   Article   where   Editor=b.Editor   and   Passed=True)
FROM   Admin   as   a  
        INNER   JOIN   Article   as   b   ON   a.UserName   =   b.Editor  
where   b.Passed=True  
        and   DateDiff( 'd ',UpdateTime,#2007-3-21#) <7
group   by   Editor  
order   by   count(articleid)   desc
-----------------------------------
上面的语句有个小问题,就是如果一个用户总共发过10篇文章,可最近一周没有发过文章,查询的结果中就没有了这个用户
这个怎么解决,

我想的是,有了下面这个排行

名次 用户名   文章总数  
1     bobo           20  
2     xixi           10

在把该排行中存在的用户名的最近一周的发文章数查询出来




------解决方案--------------------
select * from (
select UserName,nz((select count(*) from Article where a.[UserName]=Editor),0) as allcounts ,
nz((select count(*) from Article where a.[UserName]=Editor and datediff( 'd ',UpdateTime,date()) <7
),0) as weekcounts from Admin a)   order by allcounts