sql - 根据多个值从组中选择行

RRZ*_*ope 1 sql sql-server-2008-r2

我有一张桌子:

| ID    | Val |
+-------+-----+
| abc-1 |  10 |
| abc-2 |  30 |
| cde-1 |  10 |
| cde-2 |  10 |
| efg-1 |  20 |
| efg-2 |  11 |
Run Code Online (Sandbox Code Playgroud)

并希望得到基于子串(ID,1,3)最小值的结果,并且如果Val有重复,则ist必须是第一个

| ID    | Val |
+-------+-----+
| abc-1 |  10 |
| cde-1 |  10 |
| efg-2 |  11 |
Run Code Online (Sandbox Code Playgroud)

问题是我卡住了,因为我不能使用group by substring(id,1,3),ID,因为它将再次有2行(每个用于abc-1和abc-2)

Mat*_*lie 9

WITH
  sorted
AS
(
  SELECT
    *,
    ROW_NUMBER() OVER (PARTITION BY substring(id,1,3) ORDER BY val, id) AS sequence_id
  FROM
    yourTable
)
SELECT
  *
FROM
  sorted
WHERE
  sequence_id = 1
Run Code Online (Sandbox Code Playgroud)