sql >> データベース >  >> RDS >> Sqlserver

複数の日付範囲の間に値が表示された回数をカウントし、前の週と比較する SQL Server

    これにより、探しているものが得られると思います:

    ;WITH 
    weekcounts AS (
        SELECT Time_Stamp, Emp_ID, [Balance], ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2) AS [Hours], DATEPART(week, Time_Stamp) AS int_week FROM newSampleData
    )
    
    ,counts AS (
        SELECT Emp_ID, int_week, 1 AS int_count
        FROM weekcounts
        WHERE ([Hours] >= 7.5)
        UNION ALL
        SELECT weekcounts.Emp_ID, weekcounts.int_week, 1 AS int_count
        FROM weekcounts
            INNER JOIN counts
                ON weekcounts.Emp_ID = counts.Emp_ID
                AND (weekcounts.int_week - 1) = counts.int_week
                AND ([Hours] >= 7.5)
    )
    
    ,countsagg AS (
        SELECT Emp_ID, int_week, SUM(int_count) AS int_count
        FROM counts
        GROUP BY Emp_ID, int_week
    )
    
    SELECT Emp_ID, 
           ISNULL([29],0) AS [week 29],
           ISNULL([30],0) AS [week 30],
           ISNULL([31],0) AS [week 31],
           ISNULL([32],0) AS [week 32],
           ISNULL([33],0) AS [week 33] 
    FROM countsagg
    PIVOT (MAX(int_count) FOR int_week IN ([29],[30],[31],[32],[33])) piv
    

    また、 Balance が varchar の場合、提供されたコードで必要以上の変換を行っています。これにより、少ないコードで数時間の結果が得られます:

    ROUND(CONVERT(FLOAT,[Balance]) / 60.0,2)
    



    1. DjangoがMySQLdbpythonモジュールを見つけることができません

    2. PostgreSQLデータベースを作成する方法

    3. MySQLデータベースをバックアップするPHPスクリプト

    4. リレーショナルデータベースでパフォーマンスの問題を説明するにはどうすればよいですか?