2017-03-07 4 views
1

Ich habe diese Tabelle.Wählen Sie Zeilen mit dem niedrigsten Preis nach einer anderen Spalte gruppiert

enter image description here

Ich möchte Zeilen auszuwählen, mit dem niedrigsten Preis für jedes pg_id

Ich habe diese Abfrage

SELECT 
    *, MIN(product_price) 
FROM 
    `product_group_scrape_history` 
GROUP BY 
    pg_id; 

Aber sein gibt mir dieses Ergebnis

Beachten Sie die date_scraped Spalte 1. Reihe. Sein 2017-03-01 09:15:17 aber es sollte 2017-03-09 06:25:41 sein.

enter image description here

Antwort

1

Wenn Sie wan mit min Preis in einem pg_id Zeile zu finden, können Sie den Mindestpreis pro pg_id in einer Unterabfrage finden und dann mit der Tabelle verbinden sie das gewünschte Ergebnis zu erhalten.

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 

Beachten Sie, dass diese mehrreihige pro pg_id im Falle zurück gibt es mehrere Zeilen mit min Produktpreis für diesen pg_id.

Wenn Sie wirklich eine Zeile benötigen pro pg_id mit Produktpreis min, können Sie die Benutzervariablen verwenden:

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; 

Wenn Sie Zeilen für jedes Produkt in einem pg_id mit min Preis zu finden bedeutet, können Sie Verwendung:

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; 
+0

ich möchte – Umair

+0

@Umair nur ein Produkt pro pg zu finden - Sie haben die erste können dann – GurV

+0

@Umair - eine weitere Alternative hinzufügen, wenn Sie wirklich pro pg eine Zeile wollen. Siehe den zweiten – GurV

Verwandte Themen