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)
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)