簡體   English   中英

SQL獲取過去十二個月的數據

[英]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

sql小提琴演示

使用派生表獲取過去一年中每個月的最新日期,然后與原始表進行內部聯接以獲取這些日期所需的計數,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM