2015-11-21 24 views
1

我有這樣的表,命名獎勵:MySQL的條件語法在SELECT

+----+------------+-----------+----------+-------------+ 
| id | product_id | sell_what | get_what | valid_until | 
+----+------------+-----------+----------+-------------+ 
| 1 | 1001  | 10  | 10000 | 15 nov 2015 | 
| 2 | 1002  | 7   | 12000 | 31 dec 2015 | 
| 3 | 1003  | 12  | 100000 | 31 dec 2015 | 
+----+------------+-----------+----------+-------------+ 

,而且我有這個表,命名user_earned:

+----+---------+------------+-----------+------------------+ 
| id | user_id | product_id | sell_what | transaction_date | 
+----+---------+------------+-----------+------------------+ 
| 1 | 609  | 1003  | 1   | 2 Nov 2015  | 
| 2 | 220  | 1001  | 12  | 3 Nov 2015  | 
| 3 | 609  | 1003  | 1   | 20 Nov 2015  | 
| 4 | 910  | 1001  | 2   | 21 Nov 2015  | 
| 5 | 910  | 1001  | 3   | 21 Nov 2015  | 
| 6 | 910  | 1001  | 8   | 22 Nov 2015  | 
+----+---------+------------+-----------+------------------+ 

我也有這個疑問來總結sell_what號基於user_id

SELECT user_id, product_id, 
SUM(sell_what) AS sold, 
MAX(transaction_date) AS transaction_date 
FROM user_earned 
GROUP BY user_id, product_id 

和這裏的結果:

+---------+------------+-----------+------------------+ 
| user_id | product_id | sold  | transaction_date | 
+---------+------------+-----------+------------------+ 
| 220  | 1001  | 12  | 3 Nov 2015  | 
| 609  | 1003  | 2   | 20 Nov 2015  | 
| 910  | 1001  | 13  | 22 Nov 2015  | 
+---------+------------+-----------+------------------+ 

現在,問題是...如何加入這一結果與表的獎勵,讓我得到了表是這樣的:

+---------+------------+-----------+-------------------+ 
| user_id | product_id | sold  | remaining_balance | 
+---------+------------+-----------+-------------------+ 
| 220  | 1001  | 12  | 2     | 
+---------+------------+-----------+-------------------+ 

用戶609是不可見的,因爲他只有2級銷售的產品,而產品1003的最低報酬爲12

,因爲他的最新產品1001 TRANSACTION_DATE是2015年11月22日910用戶是不可見的,而獎勵有效期至11月15日2015年

如何應用這種合作nditional到一個SQL語法?謝謝。

+0

1.存儲日期爲日期2.告訴我們earned_incentive – Strawberry

+0

好吧,我想我得到了你想要... – Blag

+0

什麼BTW:你有你的查詢時出現錯誤:' FROM earn_incentive',但是你在上面使用'user_earned'作爲表名... – Blag

回答

0

我想你想要這種要求?

select * , 
    (t.sold - r.sell_what) as remaining_balance 
from reward as r 
inner join (
    SELECT user_id, product_id, 
    SUM(sell_what) AS sold, 
    MAX(transaction_date) AS transaction_date 
    FROM earned_incentive 
    GROUP BY user_id, product_id 
    ) as t 
    on r.product_id = t.product_id 
WHERE 
    r.sell_what <= t.sold 
    and t.transaction_date <= r.valid_until 

檢查SQL Fiddlesqlfiddle http://sqlfiddle.com/images/fiddle_transparent_small.png

+0

它的工作原理,兄弟......非常感謝...... –