有类似的问题,但他们的解决方案无法解决我的问题。请考虑下表:
id type time
1 a 1
1 a 2
1 b 3
2 b 1
2 b 2
我想要的是具有最短时间的id和与该时间相关联的类型,因此结果应为:
id type time
1 a 1
2 b 1
(如果与不同类型的时间相关,则可以选择任何类型) 我当前的查询如下:
SELECT id, type, min(time) FROM t GROUP BY id, type;
无法解决重复类型问题。 我可以做一个查询来实现吗? 非常感谢
答案 0 :(得分:1)
而不是group by
,请使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by id order by time) as seqnum
from t
) t
where seqnum = 1;
答案 1 :(得分:-1)
- 使用子查询我们也可以实现它。
CREATE TABLE #Temp (
id INT
,[type] CHAR(1)
,[time] INT
)
INSERT INTO #Temp VALUES
(1,'a',1),
(1,'a',2),
(1,'b',3),
(2,'b',1),
(2,'b',2)
SELECT DISTINCT T.id
,T.type
,DT.MinTime
FROM #Temp T
INNER JOIN (
SELECT MIN(TIME) AS MinTime
FROM #Temp
GROUP BY [TYPE]
) AS DT ON T.[time] = DT.MinTime