SQL MAX和相同的优惠券

时间:2017-12-24 12:38:57

标签: 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上使用相同的优惠券代码时,结果一无所获。

我该如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:1)

请改为尝试:

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';

这样内部查询将为您提供每个coupon的最大ID,然后内部联接将删除所有期望具有最大ID的优惠券。

在使用IN谓词的查询中,您正在比较外部查询中任何优惠券的最大ID,而不仅仅是每张优惠券的最大ID。

答案 1 :(得分:1)

为什么不这样做?

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