4

次のような情報を含むテーブルを取得しようとしています。

+----+---+---+
| ID | X | Y |
+----+---+---+
| A  | 1 | 3 |
| A  | 1 | 1 |
| A  | 1 | 2 |
| A  | 1 | 7 |
| B  | 2 | 2 |
| B  | 3 | 3 |
| B  | 1 | 9 |
| B  | 2 | 4 |
| B  | 2 | 1 |
| C  | 1 | 1 |
+----+---+---+

最初の列でグループ化して、両方の列で最小値を選択できるようにしたいと思います.「X」列はY列よりも重要です。たとえば、クエリは次のようなものを返す必要があります。

+----+---+---+
| ID | X | Y |
+----+---+---+
| A  | 1 | 1 |
| B  | 1 | 9 |
| C  | 1 | 1 |
+----+---+---+

何か案は?私は何十もの投稿と実験を行ってきましたが、これまでのところ運がありません.

ありがとう、ジェームズ

4

2 に答える 2

4

最小の x 値を持つが必要なようです。また、x に重複がある場合は、y が最小のものを使用します。

これには、次を使用しますrow_number()

select id, x, y
from (select t.*,
             row_number() over (partition by id order by x, y) as seqnum
      from t
     ) t
where seqnum = 1

データベースがウィンドウ関数をサポートしていない場合でも、これを SQL で表現できます。

select t.id, t.x, min(t.y)
from t join
     (select id, MIN(x) as minx
      from t
      group by id
     ) tmin
     on t.id = tmin.id and t.x = tmin.minx
group by t.id, t.x
于 2013-03-01T18:20:28.260 に答える
2

RDBMS がウィンドウ関数をサポートしている場合、

SELECT ID, X, Y
FROM
        (
            SELECT ID, X, Y,
                    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY X, Y) rn
            FROM    tableName
        ) d
WHERE   rn  = 1
于 2013-03-01T18:20:58.157 に答える