ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

SQL to AsakusaFW:ある値がMAXであるレコードの取得

2021-12-07 00:00:00 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の7日目です。

ある値が最大であるレコードを取得するSQLは、以下のように書きます。

select * from テーブル1 t1
where カラム1 = (select MAX(カラム1) from テーブル1 t2 where t2.カラム2 = t1.カラム2)
;

これを単純にAsakusaFW化すると、サブクエリーでひとつのOperatorを作り、さらにそれと結合するCoGroup演算子なりGroupViewなりが必要となります。
が、AsakusaFWではGroupSort演算子ひとつで実現できるので、むしろSQLより簡単です。

@GroupSort
public void getMaxRecord(
  @Key(group = {"カラム2"}, order = {"カラム1 desc"} @Once Iterable<テーブル1> inList,
  Result<テーブル1> out
) {
  for (テーブル1 in : inList) {
    out.add(in);
    break;
  }
}

カラム1を降順に並べて先頭1レコードを取れば、カラム1が最大であるレコードを取得できます。
(カラム1が最大であるレコードが複数ある場合は、カラム1が先頭レコードと同一である間だけ出力するようにすればいいです)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする