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 回答