实现日、周、月排行统计 sql
在如今很多系統(tǒng)中,都需要進(jìn)行日、周、月排行統(tǒng)計(jì),但是在網(wǎng)上尋找 了一番,發(fā)現(xiàn)很多都是相對(duì)的周、月排行,即周排行則用當(dāng)前時(shí)間減去7天。這樣我個(gè)人認(rèn)為并不恰當(dāng)。如月排行中,假設(shè)今天是4月22日,則從3月22日至4月22日之間都可以算成月排行內(nèi),這樣的話與我們的月排行不盡相同,我認(rèn)為月排行應(yīng)該指當(dāng)月的排行。
?????????概括一下,即兩種情況:當(dāng)前日期往前推一周或者一個(gè)月(暫且描述為“相對(duì)排行”),當(dāng)前日期所在周或 者所在月(暫且描述為“絕對(duì)排行”)。
?????????為了好描述和分析,舉例說(shuō)明。示例數(shù)據(jù)庫(kù)如下:
?
?說(shuō)明:
表名:T_Visit
?????????當(dāng)前日期:2009-4-22
?????????表中數(shù)據(jù):如下
?????????當(dāng)前日期為星期 幾(@day):3
?
?
相對(duì)排行實(shí)現(xiàn)辦法:
?
?????????日排行:
?????????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
????絕對(duì)排行實(shí)現(xiàn)辦法:
?????????日排行:
?????????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))
????結(jié)果如下圖:
?
?
周排行:
????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))
結(jié)果如下圖:
?
月排行:
Select?top?20 ID,?userIp,?Date?from?T_Visit?where?year(Date)=year(getdate())?andmonth(date)=month(getdate())
結(jié)果如下圖:
?
(注:本示例在Sql Server 2005環(huán)境中測(cè)試)
轉(zhuǎn)載于:https://www.cnblogs.com/jthb/p/3734182.html
總結(jié)
以上是生活随笔為你收集整理的实现日、周、月排行统计 sql的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 公务卡是什么?公务卡取现要手续费吗?
- 下一篇: 在 VirtualBox 中 CentO