在如今很多系統中,都需要進行日、周、月排行統計,但是在網上尋找 了一番,發現很多都是相對的周、月排行,即周排行則用當前時間減去7天。這樣我個人認為并不恰當。如月排行中,假設今天是4月22日,則從3月22日至4月22日之間都可以算成月排行內,這樣的話與我們的月排行不盡相同,我認為月排行應該指當月的排行。
?????????概括一下,即兩種情況:當前日期往前推一周或者一個月(暫且描述為“相對排行”),當前日期所在周或 者所在月(暫且描述為“絕對排行”)。
?????????為了好描述和分析,舉例說明。示例數據庫如下:
?
?說明:
表名:T_Visit
?????????當前日期:2009-4-22
?????????表中數據:如下
?????????當前日期為星期 幾(@day):3
?
?
相對排行實現辦法:
?
?????????日排行:
?????????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))
????結果如下圖:
?
?
周排行:
????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))
結果如下圖:
?
月排行:
Select?top?20 ID,?userIp,?Date?from?T_Visit?where?year(Date)=year(getdate())?andmonth(date)=month(getdate())
結果如下圖:
?
(注:本示例在Sql Server 2005環境中測試)