1

SQL コマンドが正しく機能していないことに気付きました。

基本的に、2 つの列を持つ 1 つのテーブルがあります。毎月のユーザー数を追跡します。レイアウトは次のようになります。

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

等々。1 か月に複数のエントリがあることがわかります。過去 1 年間の各月の最新の値を取得して、折れ線グラフに表示できるようにする必要があります。

私はこれをしていました:

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 が負の数の場合に問題が発生することがわかります。これは、前の年に移動する方法がわからないためです。これを達成するためのより良い方法はありますか?

4

2 に答える 2

0

派生テーブルを使用して、過去 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 ;
于 2013-09-30T16:04:00.200 に答える