我有一個適度複雜的查詢來運行,爲了這個問題的目的,我已經在下面稍微簡化了一下。我有兩張桌子;在組上選擇分鐘
TABLE: plan_costs
id, plan_id, cost, special_cost + more columns....
1 1 23.00 12.00
2 1 25.00 15.00
3 2 5.00 2.00
4 2 45.00 28.00
5 3 35.00 30.00
6 3 65.00 60.00
TABLE: plan_details
plan_id, group_id, + more columns....
1 1
2 1
3 2
我需要的是最便宜的計劃清單,2倍的值(在這種情況下,5和30),但每組只有一個計劃之間。當我在下面運行計劃時,我會爲每個組計劃一個計劃,但它並不總是最便宜的計劃。注意:如果不是0,有一種情況條件優先使用special_cost成本。任何想法?
SELECT p1.id,
p2.plan_id,
p1.cost,
p1.special_cost CASE
WHEN p1.special_cost = 0 THEN MIN(p1.cost)
ELSE MIN(p1.special_cost)
END AS cost_order,
FROM plan_costs AS p1
LEFT JOIN plan_details AS p2 ON (p2.plan_id = p1.plan_id)
WHERE CASE
WHEN p1.special_cost = 0 THEN p1.cost >= 5
ELSE p1.special_cost >= 5
END
AND CASE
WHEN p1.special_cost = 0 THEN p1.cost <= 30
ELSE p1.special_cost <= 30
END
GROUP BY p2.group_id
ORDER BY CASE
WHEN p1.special_cost = 0 THEN p1.cost
ELSE p1.special_cost
END ASC
編輯:添加最後的結果,我需要
要求的結果:
id, plan_id, cost, special_cost
1 1 23.00 12.00
5 3 35.00 30.00
您發佈的樣本數據的期望結果是什麼? –
special_cost會比有史以來的成本低嗎? –
@Mahmoud Gamal我將在html中輸出結果列表。 – Mark