Tsql 选择不同的子字符串值

Tsql 选择不同的子字符串值,tsql,substring,distinct,Tsql,Substring,Distinct,我有一个类似于MAC地址的字段,第一部分是组ID,第二部分是序列号。我的字段是字母数字,长度为5位,前3位是组ID 我需要一个查询,该查询按字典顺序为我提供所有不同的组ID和第一个序列号。以下是示例数据: ID ----- X4MCC X4MEE X4MFF V21DD 8Z6BB 8Z6FF 期望输出: ID ----- X4MCC V21DD 8Z6BB 我知道我可以选择不同的子字符串(ID,1,3),但我不知道如何按字典顺序获取第一个子字符串。另一种方法似乎与gbn的查询成本相同: S

我有一个类似于MAC地址的字段,第一部分是组ID,第二部分是序列号。我的字段是字母数字,长度为5位,前3位是组ID

我需要一个查询,该查询按字典顺序为我提供所有不同的组ID和第一个序列号。以下是示例数据:

ID
-----
X4MCC
X4MEE
X4MFF
V21DD
8Z6BB
8Z6FF
期望输出:

ID
-----
X4MCC
V21DD
8Z6BB

我知道我可以选择不同的子字符串(ID,1,3),但我不知道如何按字典顺序获取第一个子字符串。

另一种方法似乎与gbn的查询成本相同:

SELECT
   ID
FROM
   (
   SELECT
      ID,
      ROW_NUMBER() OVER (PARTITION BY SUBSTRING(ID, 1, 3) ORDER BY ID) AS rn
   FROM MyTable
   ) oops
WHERE
   rn = 1
SELECT MIN(id)
FROM your_table
GROUP BY SUBSTRING(id, 1, 3);

我会根据相似的组id进行分组,并根据行id选择第一个。在我处理查询时只是一个提示。这告诉我在何处附近的语法不正确。我复制并粘贴,然后将字段名和表更改为真实的表。。。检查了打字错误,我不知道我做错了什么。如果我只运行内部查询,它将运行fine@SupremeDud派生表上需要一个别名。@Mikael Eriksson:oops,我匆忙中错过了。Thanks@gbn不客气。我真的很喜欢你的别名。在一个80%的表名都是MyTable或YourTable的世界(SO),表别名
oops
非常合适。