1

現在、SQL データベースを利用するアプリケーションを開発しています。このデータベースでは、session id (int)、date_created (datetimeoffset)、date_expired (datetimeoffset) フィールドの 3 つのフィールドを持つ session というテーブルを維持しています。

セッションの最小 date_created と最大 date_expired が 6 時間を超えないように、セッションのクラスターにセッションをグループ化したいと考えています。また、グループをオーバーラップさせたくありません。つまり、セッション s1 がグループ 1 に属している場合、それをグループ 2 にも含めたくありません。

何か案は?

4

1 に答える 1

1

0〜6、6〜12、12〜18、18〜24のような4つのデータグループを作成することをお勧めします。これにより、次のように実行できます。

参考:簡単にするためcaseに、日付の列のみを使用しました。date_createdとdate_expiredの間にdatediffを使用する必要があります。

参考までに:中間の値を自分に合ったものに変更すると、最終的にクエリは値を1、2、3、4に返します。これは、「0から6」、「6から12」などに変更する必要があります。 ..

with MyCTE as (
    select case 
            when datepart(hh,date ) between 0 and 6 then 1
            when datepart(hh,date ) between 6 and 12 then 2
            when datepart(hh,date ) between 13 and 18 then 3
            else 4
            end
          as myDatebucket 
    , *
    from session
) 
select myDatebucket, count(*)
from MyCTE
group by myDatebucket
order by myDatebucket
于 2012-06-25T12:57:49.047 に答える