tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:GROUP BYでカテゴリ毎に集計

レコードの新規作成時に特定のカテゴリ毎に採番を行いたい場合があると思います。

f:id:tyoshikawa1106:20151230000738p:plain
f:id:tyoshikawa1106:20151230001424p:plain


そんなときはGROUP BYとMAX関数をつかって現在割り当てられている採番の最大値を取得することができます。

SELECT Category__c, Max(CategoryNo__c) FROM CategoryInfo__c GROUP BY Category__c

f:id:tyoshikawa1106:20151230001613p:plain


ApexトリガのBefore Insertで採番の最大値を取得して+1していけばカテゴリごとの採番を自動化することも可能です。
f:id:tyoshikawa1106:20151230002014p:plain
f:id:tyoshikawa1106:20151230001937p:plain


注意点としてデータローダの一括処理などでBulk APIの並列実行を行った場合、最新の採番が取得できない可能性が考えられます。こういった採番処理を行う場合、並列処理は行わないようにしたほうが良さそうです。


GROUP BYクエリについての詳細はこちらです。

追記

GROUP BYのキーに指定する項目には、数式/参照先項目は指定できません。
集計処理が必要な場合は、上記2つのデータ型以外の項目を用意しましょう。

サンプルコード

Apex Trigger & Group By Queryのサンプルコードです。

デモ動画