SQLiteにクエリがあり、特定の列でグループ化し、selectステートメントの別の列で集計関数MAXを使用しています。ここで、MAX集計によって表示される値を保持する行のROWIDも必要です。主キーの制約があるため、これは一意の行である必要があることを私は知っています。クエリの書き方がわかりません。次の例を参照してください。
create table t1 (c1, c2, constraint t1_pk primary key (c1, c2));
insert into t1 values ('boys', 1);
insert into t1 values ('boys', 2);
insert into t1 values ('girls', 1);
insert into t1 values ('girls', 2);
これで、両方の列に主要な制約があるテーブルができました。テーブルのSELECTクエリは、次の出力を提供します。
sqlite> select rowid, * from t1;
rowid|c1|c2
1|boys|1
2|boys|2
3|girls|1
4|girls|2
ここで、c1でグループ化し、c2のMAXを選択します。次に、現在表示されている値を保持する行のROWIDが必要です。次のクエリを参照してください。
sqlite> select rowid, c1, max(c2) from t1 group by c1;
rowid|c1|max(c2)
2|boys|2
4|girls|2
sqlite> select rowid, c1, min(c2) from t1 group by c1;
rowid|c1|min(c2)
2|boys|1
4|girls|1
MIN集計を使用した2番目のクエリは、MIN値を保持している行のROWIDを返す必要があります。これは、私が達成したいことです。
rowid|c1|min(c2)
1|boys|1
3|girls|1
ここで、次の副選択を試しましたが、エラーが発生するため、どちらも機能しません。
sqlite> select (select rowid from t1 b where b.c1 = a.c1 and b.c2 = max(a.c2)), a.c1, max(a.c2) from t1 a group by a.c1;
Error: misuse of aggregate function max()
sqlite> select (select rowid from t1 b where b.c1 = a.c1 and b.c2 = min(a.c2)), a.c1, min(a.c2) from t1 a group by a.c1;
Error: misuse of aggregate function min()
私が最後に試したのは、FROM句のサブクエリですが、これも機能しません。
sqlite> select
...> (select rowid from t1 b where b.c1 = c.c1 and b.c2 = c.c2),
...> c1,
...> c2
...> from
...> (select a.c1, max(a.c2) as c2 from t1 a group by a.c1) c;
Error: misuse of aggregate: max()
sqlite> select
...> (select rowid from t1 b where b.c1 = c.c1 and b.c2 = max(c.c2)),
...> c.c1,
...> max(c.c2)
...> from
...> (select a.c1, a.c2 from t1 a group by a.c1) c;
Error: misuse of aggregate function max()
私の問題の解決策はありますか?他に何ができるか本当にわかりません。