[英]SQL Get past twelve months of data
剛意識到我的SQL命令無法正常工作。
基本上我有一個有兩列的表。 它跟蹤每個月的用戶數。 布局是這樣的:
StatDate UserCount
-------- ---------
11/2/2012 5
12/8/2012 10
12/23/2012 25
1/8/2013 50
2/18/2013 100
3/22/2013 33
等等。 您可以看到每個月可以有多個條目。 我需要能夠檢索過去一年中每個月的最新值,以便可以將其放入折線圖中。
我正在這樣做:
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 0 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 1 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 2 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 3 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 4 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 5 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 6 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 7 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 8 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 9 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 10 ORDER BY StatDate DESC;
SELECT TOP 1 UserCount FROM Stats_UserCount WHERE MONTH(StatDate)=MONTH(GetDate()) - 11 ORDER BY StatDate DESC;
但是您可以看到,當MONTH為負數時會出現問題,因為它不知道如何計算上一年。 有沒有更好的方法來實現這一目標?
假設您正在使用SQL Server 。
通過將StatDate與上一年當前月份的第一個數字進行比較,可以得出過去的12個月:) StatDate >= dateadd(month, datediff(month, 0, getdate()) - 12, 0);
(如果有的話,這種查詢也會在StatDate列上使用索引)。 您可以使用row_number()
函數在一個查詢中獲取所需的數據:
with cte as (
select
StatDate, UserCount,
row_number() over(partition by month(StartDate) order by StartDate desc) as rn
from Table1
where StatDate >= dateadd(month, datediff(month, 0, getdate()) - 12, 0)
)
select StatDate, UserCount
from Table1
where rn = 1
使用派生表獲取過去一年中每個月的最新日期,然后與原始表進行內部聯接以獲取這些日期所需的計數,如下所示:
SELECT UserCount, T.STATDATE
FROM
(SELECT MAX(StatDate) AS STATDATE
FROM STATS_USERCOUNT
WHERE DATEDIFF(MONTH,GETDATE(),StatDate) <=12
GROUP BY MONTH(StatDate)) AS T
INNER JOIN STATS_USERCOUNT S ON T.STATDATE = S.StatDate ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.