Mysql 选择按另一列分组的价格最低的行

Mysql 选择按另一列分组的价格最低的行,mysql,Mysql,我有这张桌子 我想选择每个pg\u id的价格最低的行 我有这个疑问 SELECT *, MIN(product_price) FROM `product_group_scrape_history` GROUP BY pg_id; 但它给了我这个结果 注意第一行的date\u scraped列。它的2017-03-01 09:15:17,但它应该是2017-03-09 06:25:41 如果要在pgu id中查找具有最小价格的行,可以在子查询中查找每个pgu id的最

我有这张桌子

我想选择每个
pg\u id的价格最低的行

我有这个疑问

SELECT
    *, MIN(product_price)
FROM
    `product_group_scrape_history`
GROUP BY
    pg_id;
但它给了我这个结果

注意第一行的
date\u scraped
列。它的
2017-03-01 09:15:17
,但它应该是
2017-03-09 06:25:41


如果要在pgu id中查找具有最小价格的行,可以在子查询中查找每个pgu id的最小价格,然后将其与表联接以获得所需结果

select p1.*
from product_group_scrape_history p1
join (
    select pg_id,
        min(product_price) product_price
    from product_group_scrape_history
    group by pg_id
    ) p2 on p1.pg_id = p2.pg_id
    and p1.product_price = p2.product_price
请注意,如果有多行具有该PGU id的最低产品价格,则这将返回每个PGU id的多行

如果您确实需要每个pg_id有一行最低产品价格,您可以使用用户变量:

select *
from (
    select
        t.*,
        @rn := if(@pg_id = pg_id, @rn + 1, if(@pg_id := pg_id, 1, 1)) rn
    from (
        select *
        from product_group_scrape_history
        order by pg_id, product_price
    ) t, (select @rn := 0, @pg_id := -1) t2
) t where rn = 1;
如果要在pg_id中查找每个产品的最低价格行,可以使用:

select p1.*
from product_group_scrape_history p1
join (
    select pg_id,
        product_id,
        min(product_price) product_price
    from product_group_scrape_history
    group by pg_id,
        product_id
    ) p2 on p1.pg_id = p2.pg_id
    and p1.product_price = p2.product_price
    and p1.product_id = p2.product_id;

我只想找到一个产品,每个pg@Umair-你可以用第一个then@Umair-如果您确实希望每一页有一行,请添加另一个备选方案。请参阅第二行