我现在设计如下
统计表
GUID  商品  日    周   月   年   总
1     AA    0     0    0    0    0统计明细表
GUID  商品  访问时间
1     AA    2010-10-06 18:26:01
1     AA    2010-10-06 18:26:02
1     AA    2010-10-06 18:26:03
------------------------------
也就通过“统计明细表”来保存每一次的访问数据
然后当插入一条数据的时候去更新“统计表”
但这样有几个问题
1:
如果这样的话我每插入一条数据,都得对当前商品的所有记录进行统计,会占用很大的资源,但这样能保证数据的正确性
2:
对于日访问是,当天,还是要取24小时内
同理 周是取当周还是7天内
同理,月年也一样大家是如何处理上面的问题,希望大家给个解决方案思想谢谢

解决方案 »

  1.   

    select * from table where datediff(Month,dt,getdate())=1 --距现在时间1个月   
    select * from table where datediff(quarter,dt,getdate())=1 --距现在时间1季度   
    select * from table where datediff(year,dt,getdate())=1 --距现在时间1年 
      
    select sum(a),day([dt]) from table where year([dt]) = '2010' group by day([date]) select sum(a),datename(week,[dt]) from table where year([dt]) = '2010' group by datename(week,[dt]) 
      

  2.   

    楼上的SQL我会写
    我只是说如果这样的话会不会操作非常之大
    因为这个访问量我每一条都记录,到时会有几百万到几千万条记录
    然后第添加一条进行的话就要对这几百几千万条记录进行统计然后更新到“统计表”
    感觉会对数据库有很大的压力谢谢
      

  3.   

    --时间的处理 
    --(1)短时间的处理 
    declare @S datetime 
    set @S=getdate() 
    --select (convert(varchar(10),@S,120)) 
    --select datediff(m,@S,3) 
    select replace(convert(varchar(10),@S,120),'-0','-') 
    --长时间的处理 
    declare @S datetime 
    set @S=getdate() 
    select  
    stuff( 
    stuff(convert(varchar(10),@s,112),5,0,'年'),8,0,'月')+'日' 
    --日期第一天 
    declare @S datetime 
    set @S=getdate() 
    select convert(varchar(4),@s,120)+'0101' 
    --指定日期所在季度的第一天 
    declare @S datetime 
    set @S=getdate() 
    select convert(datetime, 
    convert(char(6),dateadd(month,datepart(qq,@S)*3-2,dateadd(month,-month(@S),@s)),112)+'01') 
    --指定日期所在的季度的最后一天 
    declare @S datetime 
    set @S=getdate() 
    select dateadd(day,-1,(convert(datetime, 
    convert(char(6),dateadd(month,datepart(qq,@S)*3+1,dateadd(month,-month(@S),@s)),112)+'01'))) 
    --指定日期所在月份的第一天 
    declare @S datetime 
    set @S=getdate() 
    select convert(char(8),@s,120)+'01' 
    --指定日期所在月份的最后一天 
    declare @S datetime 
    set @S=getdate() 
    select dateadd(day,-1,convert(datetime,convert(char(8),dateadd(month,1,@s),120)+'01')) 
    --指定日期所在周的任意一天 
    declare @S datetime 
    set @S=getdate() 
    select dateadd(day,1,dateadd(day,-datepart(weekday,@s),@s)) 
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2008/12/11/3501110.aspx
      

  4.   

    细细看了一下,个人觉得LZ考虑复杂了,简单的两张表处理就可以了。
    至于后续的“日 周 月 年 总”时间,可以通过visit_time转换得到,方法参考1#,2#
    create table Product -----主表
    (
    id int identity , ---自增列
    product_name varchar(20),  --产品名称
    cuser varchar(20),--创建人
    cdate datetime, ---创建日期
    )create table Prod_Detail
    (
    id int identity, ---自增列
    prod_id int,  ----对应主表id
    visit_time datetime ---记录访问时间
    )