0

以下のデータで満たされたテーブルがあるとします。値 A の FIRST フィールド FLD_A、値 B の FIRST フィールド FLD_A などを持つすべての行を取得するには、db2 でどの SQL 関数またはクエリを使用する必要がありますか?

  ID   FLD_A    FLD_B
  1    A        10
  2    A        20
  3    A        30
  4    B        10
  5    A        20
  6    C        30

以下のようなテーブルを期待しています。関数ごとにグループ化されていることを認識していますGROUP BY but how can I limit the query to return the very first of each group?

Essentially I would like to have the information about the very first row where a new value for FLD_A is appearing for the first time?

  ID   FLD_A    FLD_B
  1    A        10
  4    B        10
  6    C        30
4

2 に答える 2

1

これを試して、SQLで動作します

SELECT * FROM Table1 
WHERE ID IN (SELECT MIN(ID) FROM Table1 GROUP BY FLD_A)
于 2013-04-19T10:24:31.813 に答える
1

この問題にアプローチする良い方法は、ウィンドウ関数を使用row_number()することです。特に:

select t.*
from (select t.*,
             row_number() over (partition by fld_a order by id) as seqnum
      from table1
     ) t
where seqnum = 1;

(これは、「最初」が「最小 ID」を意味すると想定しています。)

を使用するt.*と、出力に列が 1 つ追加されます。これを回避したい列をリストするだけです。

于 2013-04-19T10:35:58.050 に答える