Php SQL MAX和相同优惠券

Php SQL MAX和相同优惠券,php,sql,max,Php,Sql,Max,我正在使用此sql行获取最新优惠券: SELECT * FROM `coupons` WHERE `sku` = '123456' AND `id` IN (SELECT Max(id) FROM `coupons` GROUP BY coupon) ORDER BY `id` DESC LIMIT 3 它工作得很好,但在极少数情况下,当我在不同的sku上有相同的优惠券

我正在使用此sql行获取最新优惠券:

SELECT * 
FROM   `coupons` 
WHERE  `sku` = '123456' 
       AND `id` IN (SELECT Max(id) 
                    FROM   `coupons` 
                    GROUP  BY coupon) 
ORDER  BY `id` DESC 
LIMIT  3 
它工作得很好,但在极少数情况下,当我在不同的sku上有相同的优惠券代码时,结果什么都不是

我怎样才能解决这个问题

谢谢

试试这个:

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';
这样,内部查询将为每个
优惠券
提供最大id,然后内部连接将删除除具有最大id的优惠券之外的所有优惠券

在使用谓词中的
进行查询时,您正在比较外部查询中任何优惠券的最大id,而不仅仅是每个优惠券的最大id。

为什么不这样做

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

当同一优惠券上的较高id属于其他sku时会发生这种情况,因此结果为0。我想我通过在“IN”中添加其中sku='123456'解决了这个问题