2017-02-28 3 views
3

次のコードは、アイテムの最大日付を示しています。内部結合を使用して名前を取得する別のテーブルへのリンク

SELECT 
    pricing_id, pricing.field, pricing.region, price, max_date 
FROM 
    pricing 
     INNER JOIN 
    (SELECT 
     field, MAX(end_date) AS 'max_date' 
    FROM 
     pricing, regions 
    GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
     AND tmptable.field = pricing.field 
ORDER BY region, pricing.field 

IDだけを表示するpricing.region列を置き換えるために、regions.region_nameから領域名を取得しようとしています。私はテーブルを結合してわかりやすい名前を表示するために通常のwhere節を試しましたが、それはそれを壊します。

誰でも手助けできますか?

おかげで、

ジョン

+0

副選択のfrom節には価格設定と地域の両方があります。それはただの地域でなければならないのですか? –

+0

サブクエリの試行は何ですか?どのテーブルが 'end_date'で、なぜMAX(end_date)を見つけるのに両方のテーブルが必要なのですか? –

答えて

3

あなたが

気にいら

SELECT 
pricing_id, pricing.field, tmptable.region_name , price, max_date 
FROM 
pricing 
    INNER JOIN 
(SELECT 
    region_name , field, MAX(end_date) AS 'max_date' 
FROM 
    pricing, regions 
GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
    AND tmptable.field = pricing.field 
ORDER BY region, pricing.field 

が動作するはずのような領域テーブルからREGION_NAMEを選択する必要があります。

1

あなたのテーブルと仮定すると、これは動作するはずセットアップで類似しています。私はあなたが必要以上に多くの仕事のように思われるサブセレクトでそれを見つけようとしないことを前提にしています。代わりにLEFT JOINとして追加し、残りのクエリを一致させるように変更しました。

SELECT 
    pricing_id, pricing.field, r.region_name, price, max_date 
FROM 
    pricing 
     INNER JOIN 
    (SELECT 
     field, MAX(end_date) AS 'max_date' 
    FROM 
     pricing 
    GROUP BY field) AS tmptable ON tmptable.max_date = pricing.end_date 
     AND tmptable.field = pricing.field 
LEFT JOIN regions r ON r.id = pricing.region 
ORDER BY r.region_name, pricing.field 
関連する問題