我有一张桌子,像:
| ID | Val |
+-------+-----+
| abc-1 | 10 |
| abc-2 | 30 |
| cde-1 | 10 |
| cde-2 | 10 |
| efg-1 | 20 |
| efg-2 | 11 |并且希望根据子字符串(ID,1,3)和最小值和ist获得结果,如果Val有重复的,那么必须是第一个。
| ID | Val |
+-------+-----+
| abc-1 | 10 |
| cde-1 | 10 |
| efg-2 | 11 |问题是我被卡住了,因为我不能使用组按子字符串(ID,1,3),ID,因为它将再次有2行(每一行用于abc-1和abc-2)。
发布于 2012-03-16 13:54:59
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发布于 2012-03-16 14:01:34
SELECT SUBSTRING(id,1,3),MIN(val) FROM Table1 GROUP BY SUBSTRING(id,1,3);您使用的是两个SUBSTRING( id ,1,3),id而不是SUBSTRING(id,1,3)对列进行分组。在下面的链接中,它完美地工作在fine.Check中--同样的例子。
http://sqlfiddle.com/#!3/fd9fc/1
https://stackoverflow.com/questions/9738491
复制相似问题