2011-12-13 7 views
1

私は予算のテーブルを持っている:のmySQL - GROUP BYが、最新の行を取得

user_id  product_id budget  created 
----------------------------------------------------------------- 
    1    1  300  2011-12-01 
    2    1  400  2011-12-01 
    1    1  500  2011-12-03 
    2    2  400  2011-12-04 

私は、ユーザー

user_id manager_id product_id 
------------------------------------ 
    1   5    1 
    1   9    2 
    2   5    1 
    2   5    2 
    3   5    1 

とマネージャーに入社、manager_userテーブルをも持っています私がしたいのは、マネージャ#5に割り当てられたユーザーのそれぞれを集めて、「予算」を取得することです。ただし、最新のものだけです。

は今の私の文は次のようになります。

SELECT * FROM manager_user mu 
LEFT JOIN budget b 
ON b.user_id = mu.user_id AND b.product_id = mu.product_id 
WHERE mu.manager_id = 5 
GROUP BY mu.user_id, mu.product_id 
ORDER BY b.created DESC; 

問題は、それが最新の予算を引っ張らないんです。助言がありますか?ありがとう!

+0

あなたの声明は機能しません。 *とGROUP BYは選択できません。私はそう言う作業(完璧ではないが)、クエリ持っ –

+0

:http://i.imgur.com/M325Z.jpg – TerryMatula

+0

を私は解決策を掲載し、クエリは、MySQLで動作しますが、あまりにもこれを読んでいるのを見ました: http://stackoverflow.com/questions/1225144/why-does-mysql-allow-group-by-queries-without-aggregate-functions –

答えて

0

次のようにあなたが行うことができますあなたのタスクを達成するために:

select b1.user_id, 
     b1.budget 
from budget b1 inner join (
    select b.user_id, 
     b.product_id, 
     max(created) lastdate 
    from budget b 
    group by b.user_id, b.product_id) q 
on b1.user_id=q.user_id and 
    b1.product_id=q.product_id and 
    b1.created=q.lastdate 
where b1.user_id in 
    (select user_id from manager_user where manager_id = 5); 

を私はあなた(user_idは、PRODUCT_ID、作成された)の組み合わせが一意であることを、ここで仮定しています。何が価値があるために

+0

ありがとうございます。私は "group by b.user_id、b.budget"を "GROUP BY b.user_id、b.product_id"に変更し、それを稼働させました...ただし、予算にないユーザーのuser_idsも返す必要があることを除いて表。私はそれで遊んでみると、私が思いつくものを見てみましょう。 – TerryMatula

+0

あなたは正しいです。私は私の答えを編集しました。すべてのuser_idを持つには、IN句を使用する代わりに、外部join manager_userテーブルを使用できます。 –

0

は、ここで私が探していたものを返されたコードは次のとおりです。助けアンドレアため

SELECT DISTINCT(b1.id),mu.user_id,mu.product_id,b1.budget,b1.created 
FROM budget b1 
INNER JOIN (
    SELECT b.user_id, b.product_id, MAX(created) lastdate 
    FROM budget b 
    GROUP BY b.user_id, b.product_id) q 
ON b1.user_id=q.user_id AND 
    b1.product_id=q.product_id AND 
    b1.created=q.lastdate 
RIGHT JOIN manager_user mu 
    ON mu.user_id = b1.user_id AND 
    mu.product_id = b1.product_id 
WHERE mu.manager_id = 5; 

ありがとう!