我正在使用此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上使用相同的优惠券代码时,结果一无所获。
我该如何解决这个问题?
由于
答案 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 ;