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

不連続な期間 YYYYMM00 の MIN と MAX の日付を検索します

    これは一種のギャップアンドアイランド問題です。 SQL Server 2005 のようなサポートされていない古いソフトウェアでも解決できます。そのバージョンには row_number() があるためです。 .

    1 つのトリックは、タイム ID を 真正 に変換することです 日付時刻。もう 1 つのトリックは、日付/時刻の値から連続する月数を差し引いてグループを定義することです:

    select player, team, min(timeid), max(timeid)
    from (select lp.*,
                 row_number() over (partition by player, team order by timeid) as seqnum,
                 cast(cast(timeid + 1 as varchar(255)) as datetime) as yyyymm
          from logplayer lp
         ) lp
    group by player, team, dateadd(month, - seqnum, yyyymm)
    order by player, team, min(timeid);
    

    こちら db<>フィドルです。



    1. Mysqlは、別のテーブルからのIDによって1つのテーブルを削除します

    2. T-SQLを使用してリンクサーバー上にテーブルを作成する2つの方法

    3. A1をA2としてCREATETABLELIKE A1

    4. エラー:ファイルpg_tblspc / 4815857 / PG_11_201809051 / 16321を拡張できませんでした:デバイスにスペースが残っていません