在現在不少系統中,都須要進行日、周、月排行統計,可是在網上尋找了一番,發現不少都是相對的周、月排行,即周排行則用當前時間減去
7天。這樣我我的認爲並不恰當。如月排行中,假設今天是
4月
22日
,則從
3月
22日至
4月
22日之間均可以算成月排行內,這樣的話與咱們的月排行不盡相同,我認爲月排行應該指當月的排行。
歸納一下,即兩種狀況:當前日期往前推一週或者一個月(暫且描述爲「相對排行」),當前日期所在周或者所在月
(暫且描述爲「絕對排行」
)。
爲了好描述和分析,舉例說明。示例數據庫以下:
說明:
表名:
T_Visit
當前日期:
2009-4-22
表中數據:以下
當前日期爲星期幾
(@day):
3
![](http://static.javashuo.com/static/loading.gif)
相對排行實現辦法:數據庫
日排行:
select
top 20 ID, userIp, Date from T_Visit where (dbo.T_Visit.Date >= CONVERT(nvarchar(10), getdate(), 21)) AND (dbo.T_Visit.Date <= CONVERT(nvarchar(10), dateadd(day,1,getdate()), 21))
周排行:
select
top 20 ID, userIp, Date from T_Visit where dbo.T_Visit.Date > getdate()-7
月排行:
select
top 20 ID, userIp, Date from T_Visit where dbo.T_Visit.Date > getdate()-30
絕對排行實現辦法:
日排行:
select
top 20 ID, userIp, Date from T_Visit where (dbo.T_Visit.Date >= CONVERT(nvarchar(10), getdate(), 21)) AND (dbo.T_Visit.Date <= CONVERT(nvarchar(10), dateadd(day,1,getdate()), 21))
結果以下圖:
![](http://static.javashuo.com/static/loading.gif)
周排行:
declare @day
int
set @day
=3
select
top 20 ID, userIp, Date from T_Visit where (dbo.T_Visit.Date >= CONVERT(nvarchar(10),dateadd(day,-@day,getdate()),21)) AND (dbo.T_Visit.Date<=CONVERT(nvarchar(10),dateadd(day,(7-@day),getdate()), 21))
結果以下圖:
![](http://static.javashuo.com/static/loading.gif)
月排行:
Select top 20 ID, userIp, Date from T_Visit where year(Date)=year(getdate()) and month(date)=month(getdate())
結果以下圖:
![](http://static.javashuo.com/static/loading.gif)