首页 > 解决方案 > 在多组相同ID上选择编号最小的行

问题描述

我有下表作为 sql 语句的输出

user | product | price 
          …
123  | 12     | 451.29
373  | 12     | 637.28
623  | 12     | 650.84
672  | 16     | 356.87
123  | 16     | 263.90
          …

现在我只想获取每个 product_id 价格最低的行

SQL 相当简单

SELECT user, product, price
        FROM t
        WHERE product IN (
            SELECT product_id
            FROM p
            WHERE typ LIKE 'producttyp1'
        )
)

但是添加 MIN(price) 并不能像通常那样工作。我认为是因为在同一张表中有几组相同的 product_ids。是否有易于使用的解决方案,还是我必须重写整个查询?

编辑:当我从查询中删除用户时,我可以获得产品和最低价格:

12 | 451.29
16 | 263.90

但现在我必须加入用户,这是我试图避免的。

标签: sqldb2

解决方案


您可以使用row_number()

select p.*
from (select p.*,
             row_number() over (partition by product order by price asc) as seqnum
      from p
     ) p
where seqnum = 1;

推荐阅读