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-如果您确实希望每一页有一行,请添加另一个备选方案。请参阅第二行