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

MULTIPLE サブグループ集計の作成

    基本的には先ほどの質問と同じ考えが成り立つと思います。特定の完了レコードの前に、完了レコードの数を厳密に数えたいとします。これにより、集計に使用できるグループ ID が得られます。

    SQL Server 2012 以降では、累積合計機能を使用します。以前のバージョンでは、相関サブクエリまたは外部適用で同じことができます。

    このバージョンでは、上記がいくつかの点で変更されています。特に、grp を定義するロジックを簡素化します。 . row_number() の方法がわかりにくい クエリに適合します。私はロジックを理解しています - 完了したアクションを列挙し、それを集計に使用します。ただし、グループ内のすべての行でその値を取得するのは簡単ではありません。

    SELECT r.Key, a.CYCLE_BEGIN_DATE, a.CYCLE_END_DATE, a.NUM_ACTIONS_IN_CYCLE
    FROM Records r LEFT OUTER JOIN
         (select a.key, a2.grp, min(Date) as CYCLE_BEGIN_DATE,
                 max(case when Action = 'Done') then Date end) as CYCLE_END_DATE,
                 count(*) as NUM_ACTIONS_IN_CYCLE
          from actions a outer apply
               (select count(*) as grp
                from actions a2
                where a2.key = a.key and a2.date < a.date and a2.action = 'Done'
               ) a2
         group by a.key, a2.grp
        ) a
        on r.key = a.key;
      


    1. NULLレコードを除くIDでグループ化

    2. キーがkey2のサブストリングであるMySQLで結合するにはどうすればよいですか?

    3. テーブルの主キーを取得する方法は?

    4. リモートデータベースに134675の値を挿入する最速の方法