在如今很多系統中,都需要進行日、周、月排行統計,但是在網上尋找了一番,發現很多都是相對的周、月排行,即週排行則用當前時間減去
7天。這樣我個人認為並不恰當。如月排行中,假設今天是4月
22日,則從
3月22日至4月
22日之間都可以算成月排行內,這樣的話與我們的月排行不盡相同,我認為月排行應該指當月的排行。
概括一下,即兩種情況:當前日期往前推一周或者乙個月(暫且描述為「相對排行」),當前日期所在周或者所在月
(暫且描述為「絕對排行」)。
為了好描述和分析,舉例說明。示例資料庫如下:
說明:
表名:t_visit
當前日期:
2009-4-22
表中資料:
如下當前日期為星期幾
相對排行實現辦法:
日排行:
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
top20 id
,userip
,date
from
t_visit
where
year
(date
)=year
(getdate
())and
month
(date
)=month
(getdate
())結果如下圖:
(注:本示例在
sql server 2005
環境中測試
)
Python實現日周月排行榜
根據各種時間模組和python內建函式實現,換算的步驟比較簡單,邏輯比較多,僅供參考。寫的比較嘍,參考下思路就好,測試過,功能都能實現,自己可以去優化,用redis做下快取處理就好。這是用django框架實現的。直接懟 import calendar import time from datetim...
sqlserver 按日 周 月統計方法
create table t 日期時間 datetime,數量 int insert t select 2007 1 1 19 31 25 56 union allselect 2007 1 1 21 31 25 35 union allselect 2007 1 1 15 31 25 43 uni...
sqlserver 按日 周 月統計方法
摘自於網路網路 create table t 日期時間 datetime,數量 int insert t select 2007 1 1 19 31 25 56 union all select 2007 1 1 21 31 25 35 union all select 2007 1 1 15 31...