统计下载的周排行跟月排行
一般的下载站应该都有这个需求,统计本周下载排行,本月下载排行,另外如一些流量统计站也会有本周IP,本月IP这些统计需求, 需要注意的是本周下载,本月下载,跟最近7天下载,最近一个月(30)下载是有区别的, 最近7天下载,是给你一个时刻,那么从这个时刻7天前到这个时刻的下载统计,这个时间长度多是7天,而本周下载时间长度,跟给你的时刻有关,如果给你的时刻对应的是星期天早8:00,那么这个时刻就是星期天凌晨0:00 到8:00共8个小时的下载统计,如果是星期六的23:59,那么就是这个星期7天来的统计.
上面说到需要统计 日排行,周徘,跟月徘, 因此最下的排行统计时间粒度应该为一天, 如果还要按时段统计,那么最小统计粒度应该为小时,
为完成以上要求有如下表的设计
日下载数表(软件ID(int),下载数(int),日期(datetime))
每个下载动作多会进行如下操作
Create Proc 日表_Add
@软件ID int
AS
Declare @ExistID int
Set @ExistsID=0
Select @ExistsID=软件ID From [日表] Where @软件ID=软件iD And datediff(dd,日期,getdate())=0
If @ExistsID !=0
Begin
Update ....
End
Else
Begin
Insert.....
End
////
在上面的数据结构基础上,有如下的周排行统计,跟月排行统计
Create Proc 日表_StatByWeek
@datePoint datetime ---给定的时刻
As
Select 软件ID, Sum(下载次数) As Amount From [日表] Where datediff(wk,日期,@datePoint)=0 Group By 软件ID Order By Amount DESC
-按月统计
Create Proc 日表_StatByWeek
@datePoint datetime ---给定的时刻
As
Select 软件ID, Sum(下载次数) As Amount From [日表] Where datediff(mm,日期,@datePoint)=0 Group By 软件ID Order By Amount DESC
注意上面传入的参数 @datePoint 如果我当前时刻,那么就是本周(月)初到当前时刻的时间长度,如果是以前的周(月)中的某一时刻,那么统计出来的将是传入时刻对应周或月的完整一周或一月的统计
--统计连续7天的下载
Create Proc 日表_StatBySerialDays
@datePoint datetime,
@dayNum int --连续天数
As
Select 软件ID,Sum(下载数) Amount From [日表] Where datediff(dd,日期,@datePoint)<= @dayNum Group By 软件ID Order By Amount DESC
--------------
另外如果对性能有要求,那么应该建立周表,跟月表
周表(软件ID,下载数目,更新时间(datetime))
月表(软件ID,下载数目,更新时间(datetime))
每个下载 动作,除了更新日表外,还更新周表跟月表
更新的算法类似上面的 日表_Add
只是datediff 中分别换成 wk跟mm ,以找出同周,或同月的数据
统计时同样使用datediff找出给你时刻同周,或同月的下载记录集(这里不需要分组了)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述