2017-12-24 2 views
-1

Ich bin mit dieser SQL-Linie neuesten Coupon ziehen:SQL MAX und gleichen Kupon

SELECT * 
FROM `coupons` 
WHERE `sku` = '123456' 
     AND `id` IN (SELECT Max(id) 
        FROM `coupons` 
        GROUP BY coupon) 
ORDER BY `id` DESC 
LIMIT 3 

Es ist gut funktioniert, aber in seltenen Fällen, wenn ich auf verschiedenen sku gleichen Gutscheincode haben die Ergebnisse ist nichts.

Wie kann ich das lösen?

Dank

+0

Es ist passiert, wenn die höhere ID auf dem gleichen Kupon zu anderen sku so die Ergebnisse gehört 0 – warez

+0

Ich glaube, ich löste es durch Zugabe von wo sku = ‚123456‘ innen „IN“ – warez

Antwort

1

diese stattdessen versuchen:

SELECT c1.* 
FROM `coupons` AS c1 
INNER JOIN 
(
    SELECT coupon, MAX(id) AS LatestId 
    FROM `coupons` 
    where `sku` = '123456' 
    GROUP BY coupon 
) AS c2 ON c1.coupon = c2.coupon AND c1.id = c2.LatestId 
where c1.`sku` = '123456'; 

Auf diese Weise die innere Abfrage erhalten Sie die max-ID für jede coupon geben und dann die innere Verknüpfung werden alle mit dem max-ID erwarten diejenigen Coupon entfernen.

In Ihrer Abfrage unter Verwendung des Prädikats IN vergleichen Sie die maximale ID für jeden Coupon in der äußeren Abfrage, nicht nur die maximalen IDs für jeden Coupon.

1

Warum nicht einfach das tun?

SELECT c.* 
FROM coupons c 
WHERE c.sku = '123456' 
ORDER BY id DESC 
LIMIT 3 ;