我的表格结构如下
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查询。
由于
答案 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