Quantcast
Channel: ひしだまの変更履歴
Viewing all articles
Browse latest Browse all 262

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

$
0
0

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が先頭レコードと同一である間だけ出力するようにすればいいです)


Viewing all articles
Browse latest Browse all 262

Trending Articles