有个思路有点老土,  select   top   10   songname,lastupdated   from   song   
  where   datediff(ww,lastupdated,getdate())=0   order   by   点击次数   desc   
     
  select   top   10   sitename,lastupdated   from   song   
  where   datediff(dd,lastupdated,getdate())=0   order   by   点击次数   desc这个是按本日日期来取得排行的。但是比果今天的三个东西点击数分别是60 45 22
那就是这样排的
60
45
22但是要是第了第二天,三个东西的点击数又累积到 80 99 78那排行就是
99
80
78但是实际上第二天的第一个东西增加了20 第二个东西增加了 54 第三个东西增加了56
而正确的显示应该是
56
54
20
而不是上面的
99
80
78且还得实现每天从头记录一次。一周累积记录一次。一月累积记录一次。还要一个永久的总排行,也就是记录总合。。
这个要咋实现呢。各个大大请出下高招。。
此问80分-------分割线-----
我还有一个程序的用户和信息得导入另一个程序的用户 信息数据库是不同的表结构。。
感觉有点像某某论坛转换到某某论坛那种转换器。
这个也请给点思路。谢谢了
此问20分。。

解决方案 »

  1.   

    LZ可按以下方法解决:
      日,周,月分别计数,
    if(日>7日)  则重新计数,把7天的数保存下来.
    if(周>4周)  再次保存,重新计数.把每天的那个数量天天刷就可以了,周的话每天加一次,然后排名,月的话每4周排一次.-------------------------不同表的结构也可以导的,ACCESS为例,导入时会让你先择哪个列对应什么字段.
      

  2.   

    第二题补充一下,可以用程序实现,也可以直接在查询视图中用T-SQL语句完成。
      

  3.   

    谢谢LZ可按以下方法解决: 
      日,周,月分别计数, 
    if(日 >7日)  则重新计数,把7天的数保存下来. 
    if(周 >4周)  再次保存,重新计数. 把每天的那个数量天天刷就可以了,周的话每天加一次,然后排名,月的话每4周排一次. 
    这个能不能再详细一点点
      

  4.   

    你不是做类似于排名这样的边框的么!!把数据全都保存在数据库中,读的时候去判断日期.写入的日期在
    if(日  >7日)  则重新计数,把7天的数保存下来.  
    if(周  >4周)  再次保存,重新计数.  
    然后就是对数据库的操作.对不,自己想想看!!你可能没有理解我的意思!!
      

  5.   

     1.
     select   top   10   songname,lastupdated   from   song    
      where   datediff(ww,lastupdated,getdate())=0   order   by   点击次数   desc    
          
      select   top   10   sitename,lastupdated   from   song    
      where   datediff(dd,lastupdated,getdate())=0   order   by   点击次数   desc =>>
      select   top   10   songname,lastupdated   from   song    
      where   lastupdated>=DATEADD(ww, -1, getdate())   order   by   点击次数   desc    
          
      select   top   10   sitename,lastupdated   from   song    
      where   lastupdated>=DATEADD(dd, -1, getdate())      order   by   点击次数   desc