0

私はこのようなデータのテーブルを持っています:

id  user_id  A  B  C
=====================
1   15       1  2  3
2   15       1  2  5
3   20       1  3  9
4   20       1  3  7

重複するユーザーIDを削除し、A、B、Cの順に並べ替えるときに最も低く並べ替えられるレコードを保持する必要があります。したがって、上記の表を使用して、単純に並べ替えを行う一時クエリ(qry_temp)を設定します。 Aで、次にBで、次にCで。次を返します。

id user_id  A  B  C
====================
1  15       1  2  3
2  15       1  2  5
4  20       1  3  7
3  20       1  3  9

次に、user_id(Group By)、次にid(First)を持つqry_tempに基づいて合計クエリを作成しました。これにより、次のように返されると想定しました。

user_id  id
===========
15       1
20       4

しかし、それは行われていないようです。代わりに、重複するユーザーIDのグループの中で最も低いIDを返しているように見えます(したがって、1と4ではなく1と3を取得します)。Totalsクエリは、基になっているクエリの順序を使用するべきではありませんか?必要なものを取得するためのこの方法または別の方法に影響を与える可能性のあるプロパティ設定がクエリにありますか?それが役立つ場合は、SQLを次に示します。

SELECT qry_temp.user_id, First(qry_temp.ID) AS FirstOfID
FROM qry_temp
GROUP BY qry_temp.user_id;
4

1 に答える 1

2

別のタイプのクエリが必要です。次に例を示します。

SELECT tmp.id,
       tmp.user_id,
       tmp.a,
       tmp.b,
       tmp.c
FROM   tmp
WHERE  (( ( tmp.id ) IN (SELECT TOP 1 id
                         FROM   tmp t
                         WHERE  t.user_id = tmp.user_id
                         ORDER  BY t.a,
                                   t.b,
                                   t.c,
                                   t.id) )); 

ここで、tmpはテーブルの名前です。First、Last、Min、Maxはソート順に依存しません。リレーショナルデータベースでは、並べ替え順序は非常に短命です。

于 2012-11-19T15:10:10.540 に答える