简体   繁体   中英

Complicated SQL figuring out how to pull most recent data

I am writing a function to calculate an order total. I am looking at an SQL to pull this information and not hack it up with php like I currently have.

Each order has order offers for each item. Since we commonly have order amendments there might be more than one version of an order offer. The highest offer version is the data we use in calculating a price.

Now, here is the SQL I use to pull all of the order offers for the individual orders:

SELECT * FROM order_offer offer 
WHERE offer.order_id = ?
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id =     
offer.offer_id)

Now, I need to create a similar SQL to pull the coupons for each order offer. Each order offer MAY have more than one coupon or may not have them at all.

Here is the SQL I use to find valid order offers that CAN have coupons applied (if it helps)

SELECT * FROM order_offer offer 
WHERE offer.order_id = ?
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id = 
offer.offer_id)
AND offer.offer_id NOT IN
(
SELECT o.offer_id
FROM order_offer o LEFT JOIN order_coupons c ON o.offer_id = c.offer_id 
WHERE o.offer_version = offer.offer_version
AND o.offer_version = c.offer_version
AND c.order_coupon_stackable = 0
AND o.order_id = offer.order_id
)

Thank you for the help!

Can't you do just this (it will give you the coupons to the last offer):

SELECT * FROM order_offer offer 
LEFT JOIN order_coupons c ON offer.offer_id = c.offer_id AND offer.offer_version = c.offer_version
WHERE offer.order_id = ?
AND offer.offer_version IN (SELECT MAX(offer_version) FROM order_offer WHERE offer_id =     
offer.offer_id)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM