實現日 周 月排行統計

2022-03-20 21:34:25 字數 2489 閱讀 8725

在如今很多系統中,都需要進行日、周、月排行統計,但是在網上尋找了一番,發現很多都是相對的周、月排行,即週排行則用當前時間減去

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...