获取其中一个分组的行子集

时间:2014-06-27 15:51:31

标签: mysql sql postgresql

我正在开发一个包含产品,产品变体等的电子商务网站。 我做了一个复杂的查询,抛出了以下结果。

 id | product_id | options 
----+------------+---------
  1 |          1 | 1
  2 |          1 | 1
  3 |          1 | 1
  4 |          1 | 2
  5 |          1 | 2
  6 |          1 | 3
  7 |          1 | 3
  8 |          1 | 1
  9 |          1 | 4

我需要做的是为每个不同的选项值选择第一条记录。在最后一个例子中,我需要编写一个select语句来返回以下行:

 id | product_id | options 
----+------------+---------
  1 |          1 | 1
  4 |          1 | 2
  6 |          1 | 3
  9 |          1 | 4





select distinct (options,product_id) , id from(
      <The query that returns the rows on this question>
  ) as prodvalues
group by product_id, options;

但没有运气。我真的被困了。 有帮助吗?谢谢!

2 个答案:

答案 0 :(得分:2)

以下内容应该给出您要求的结果集,按照显示的方式排序,通过对要为每个组合查看一行的字段进行分组,并在所有匹配行中选择最小id字段:

SELECT MIN(id), product_id, options
FROM ( ... )
GROUP BY product_id, options
ORDER BY product_id, options

答案 1 :(得分:0)

您的查询看起来应该有效。这个产品你想要的吗?

select options, product_id, max(id) as id
from (
      <The query that returns the rows on this question>
     ) prodvalues
group by product_id, options;