按列对值进行分组,并使用另一列获取另一个的最小值

时间:2016-10-28 16:39:00

标签: sql

我的表格结构如下

userId    period    pcount
a         01/03      100
a         02/03      150
a         03/03      200
b         02/03      250
...and so on..

我希望获得每个userid的最小pcount行,因此userid的结果应该如下所示。

a     01/03   100

如果我不想要期间值,我可以按userId对所选表进行分组,并选择userId和MINount。

但是,既然我也需要这个时期,我该怎么做..

虽然我在azure上使用SQL Server,但它可能会改变,所以会喜欢标准的ansi sql查询。

由于

1 个答案:

答案 0 :(得分:2)

通常,这类请求是通过ROW_NUMBER

处理的
Select * From 
(
select row_number() Over(Partition by userId Order by pcount asc) as rn,*
From yourtable
) A
Where Rn = 1

使用INNER JOIN的另一种方法适用于大多数DBMS

SELECT A.*
FROM   yourtable A
       INNER JOIN (SELECT userId,
                          Min(pcount) AS M_pcount
                   FROM   yourtable
                   GROUP  BY userId) B
               ON A.userId = B.userId
                  AND A.pcount = B.M_pcount