SQL Server从重复项中选择最小值

时间:2015-08-13 18:23:02

标签: sql-server database relational-database

从下表中,如何为每个重复的CODE提取USERID列的最小值。

  USER_ID   |   CODE    | ROW_ID  | NAME
1111111111  |   -0.118  |   1     |  USER1
1111111111  |   91.528  |   2     |  USER2
2222222222  |   92.41   |   3     |  USER3
2222222222  |   10.85   |   4     |  USER4
2222222222  |   56.02   |   5     |  USER5
3333333333  |   -0.324  |   6     |  USER6
3333333333  |   12.78   |   7     |  USER7
4444444444  |   0.0002  |   8     |  USER8
4444444444  |   -1.324  |   9     |  USER9
5555555555  |   93.598  |   10    |  USER11
5555555555  |   101.35  |   11    |  USER12
5555555555  |   -5.425  |   12    |  USER13

我尝试了以下查询,但仅获取USER_IDMIN(CODE)。如何获得如下输出的整行?

SELECT USER_ID, min(CODE) minCODE 
FROM TABLE1 
GROUP BY USER_ID

输出应为:

  USER_ID   |    CODE   | ROW_ID | NAME
1111111111  |   -0.118  |   1    | USER1
2222222222  |   10.85   |   4    | USER4
3333333333  |   -0.324  |   6    | USER6
4444444444  |   -1.324  |   9    | USER9
5555555555  |   -5.425  |   12   | USER13

2 个答案:

答案 0 :(得分:0)

您几乎就在那里,使用查询中的结果来获取另一个列数据

;WITH minvalue AS
(
    SELECT USER_ID
    , MIN(CODE) AS MinCode ¨
    FROM TABLE1 
    GROUP BY USER_ID
)
SELECT t.USER_ID
, t.CODE
, t.ROW_ID
, t.NAME 
FROM TABLE1 t
INNER JOIN minvalue mv ON mv.USER_ID = t.USER_ID
AND mv.MinCode = t.CODE

答案 1 :(得分:0)

试试这个

;with a as ( 
    SELECT 
        * 
       ,ROW_NUMBER() OVER(PARTITION BY USER_ID ORDER BY CODE) r
    FROM TABLE1 
)
SELECT *
FROM a
WHERE r = 1