我有这张桌子。
我想选择每个pg_id
我有这个查询
SELECT
*, MIN(product_price)
FROM
`product_group_scrape_history`
GROUP BY
pg_id;
但它给了我这个结果
请注意第1行的date_scraped
列。它的2017-03-01 09:15:17
但应该是2017-03-09 06:25:41
。
答案 0 :(得分:1)
如果您想在pg_id中找到具有最低价格的行,您可以在子查询中找到每个pg_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
请注意,如果pg_id的产品价格为多行,则每个pg_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;