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

時間ベースの間隔でどのようにグループ化しますか?

    シンを複雑にしすぎていると思います。
    GROUP BY(DATEDIFF(MINUTE、 '2017-01-01'、TheDateTime)/ 30を使用できます 30分ごとにグループ化するため。もちろん、私が選んだ日付はランダムな日付です。必要に応じて、サンプルデータの最初(または最後)の日付を選択できます。
    また、この手法を使用して、任意の時間部分のすべての間隔を取得することもできます。キーワードMINUTE 使用したい日付部分、およびintreval 30 好きな間隔に。

    次のサンプルデータを検討してください。

    ;WITH CTE AS 
    (
        SELECT CAST('2017-01-01T00:00:00' as datetime) As TheDateTime, 0 as rn
        UNION ALL
        SELECT DATEADD(MINUTE, 1, TheDateTime), rn + 1
        FROM CTE
        WHERE rn < 60
    )
    
    SELECT TheDateTime, rn INTO #T
    FROM CTE
    OPTION(MAXRECURSION 0)
    

    #T 現在、次のデータが含まれています:

    TheDateTime                 rn
    2017-01-01 00:00:00.000     0
    2017-01-01 00:01:00.000     1
    2017-01-01 00:02:00.000     2
    2017-01-01 00:03:00.000     3
    ...
    2017-01-01 00:59:00.000     59
    2017-01-01 01:00:00.000     60
    

    30分ごとにグループ化された最大rnを取得するには、次のようにする必要があります。

    SELECT DATEDIFF(MINUTE, '2017-01-01', TheDateTime) / 30, MAX(rn)
    FROM #T
    GROUP BY DATEDIFF(MINUTE, '2017-01-01', TheDateTime) / 30
    

    結果:

    interval    max_rn
    0           29
    1           59
    2           60
    



    1. DATEDIFF()の例– MySQL

    2. 負の値を必要とするMYSQLでCHECK制約を作成するにはどうすればよいですか?

    3. SQL Serverトランザクションログ—パート1

    4. MySQLユーザー権限