2017-07-12 2 views
0

Wir haben einen Tabellen- Product_table:MySQL: Wie erhält man die letzte Zeile der optionalen Where-Klausel mit der Gruppe?

product_id | company_id | Status | must_show 
1   | 23   | 1  | 1 
2   | 23   | 1  | 1 
3   | 23   | 1  | 0 
4   | 23   | 1  | 0 
5   | 23   | 0  | 0 
6   | 24   | 1  | 0 
7   | 24   | 1  | 0 
8   | 24   | 1  | 0 
9   | 24   | 1  | 0 
10   | 24   | 0  | 0 

Wir brauchen die max product_id von Unternehmen zu finden, wo status is 1. Dafür verwenden wir unter query:

select * from Product_table as pt 
JOIN (select MAX(product_id) as extid from Product_table) t1 ON t1.extid = 
pt.product_id where company_id in (23,24) and status = 1 group by company_id; 

Ergebnis:

product_id| company_id| Status | must_show 
4   | 23  | 1  | 0 
9   | 24  | 0  | 0 

Diese Abfrage ist in Ordnung, aber wir haben ein Problem hier.

  1. Wenn Wert für must_show is 1 dann müssen wir max_product id für Firma mit must_show = 1 und Status = 1 anzeigen.
  2. Wenn Wert für must_show is 0 dann müssen wir Max_Produkt-ID für Firma mit Status = 1 anzeigen.

Erwartetes Ergebnis:

product_id| company_id| Status | must_show 
    2  | 23  | 1  | 1 
    9  | 24  | 1  | 0 

Bitte geben Sie mir den Weg, eine Lösung zu finden. Vielen Dank!

+0

Für 'product_id = 10, Status ist 0', warum möchten Sie das zeigen? Sie haben Folgendes erwähnt: "Wir müssen die maximale product_id der Firma finden, in der der Status 1 ist." Warum gibt es dann eine Aufzeichnung mit product_id = 10 im erwarteten Ergebnis? –

+0

Ja, wenn es eine 1 in must_show gibt, müssen wir diesen Datensatz anzeigen. Eigentlich die Priorität ändern. –

+0

Ich spreche von 'product_id = 10'. Für diesen Datensatz 'status' und' must_show' sind beide 0. –

Antwort

0

Bitte versuchen Sie unter Abfrage:

select max(t.product_id) product_id, t.company_id, t.status, t.must_show from 
(select p1.product_id, p1.company_id, p1.status, p1.must_show 
    from product_table p1 
    where status = 1 
    and must_show = (
     select max(must_show) from product_table p2 where p2.company_id = p1.company_id) 
) as t group by t.company_id; 

Ausgang:

+------------+------------+--------+-----------+ 
| product_id | company_id | status | must_show | 
+------------+------------+--------+-----------+ 
|   2 |   23 |  1 |   1 | 
|   9 |   24 |  1 |   0 | 
+------------+------------+--------+-----------+ 

company_id in (23,24) - Ich glaube, Sie haben diese Bedingung nicht brauchen, da nur diese beiden company_id in Ihrer Tabelle sind wie pro Ihre Frage Daten.

+0

Danke! Ich hab es geschafft. Dies kann die Geschwindigkeit der Seite reduzieren, aber funktionieren. –

Verwandte Themen