2016-06-28 20 views
2

私はかなり新しくSQLを使用しており、特定の日付に製品取引の価格を取得しようとしていますが、トランザクション前にその製品の最新価格を調べています価格表内にあります。SQLiteStudio:価格カタログから最新の価格を取得

ProductID | Price | Transaction_DT | Design 

1   | Null | 5/14/2016  | Plaid 
2   | 50 | 3/26/2016  | Solid 
3   | 22 | 4/12/2016  | PolkaDot 
4   | Null | 4/24/2016  | Solid 
5   | 15 | 2/24/2016  | PolkaDot 
6   | Null | 3/29/2016  | PinStripe 

私が希望:私は次のコードを入力した

Transactions        Catalog 
---------------------------------------------------------------------------- 
ProductID | Design  | Transaction_DT  ProductID | Price | Effective_DT 

1   | Plaid  | 5/14/2016   1   | 20 | 4/22/2016 
2   | Solid  | 3/26/2016   1   | 10 | 5/2/2016 
3   | PolkaDot | 4/12/2016   1   | 5  | 5/15/2016 
4   | Solid  | 4/24/2016   2   | 50 | 3/22/2016 
5   | PolkaDot | 2/24/2016   2   | 25 | 4/1/2016 
6   | PinStripe | 3/29/2016   2   | 10 | 4/2/2016 
              3   | 30 | 4/5/2016 
              3   | 25 | 4/9/2016 
              3   | 22 | 4/12/2016 
              4   | 12 | 3/15/2016 
              4   | 8  | 3/27/2016 
              4   | 6  | 4/25/2016 
              5   | 15 | 2/23/2016 
              5   | 11 | 2/25/2016 
              5   | 6  | 2/28/2016 
              6   | 26 | 2/2/2016 
              6   | 17 | 3/19/2016 
              6   | 13 | 5/16/2016 

SELECT Transactions.ProductID, 
     Catalog.Price, 
     Transactions.Transaction_DT, 
     Transactions.Design 
    FROM Transactions 
     LEFT JOIN 
     Catalog ON Transactions.ProductID = Catalog.ProductID AND 
     Catalog.Effective_DT = (
            SELECT MAX(Effective_DT) 
            FROM Catalog 
            WHERE Effective_DT <= Transactions.Transactions DT 
          ) 

をそして次の出力が得られ

具体的には、私は2つの以下のテーブルを持っています製品1、4、6の価格をそれぞれ10,8、および17に戻す(corr私が得ているNull値の代わりに、適切に出力された価格を使用します)。どのように私は適切な結果を得ることができるかについての任意のアイデア?

+0

さらに値段があります。最新のものがありますか?年上の ... ? – scaisEdge

答えて

1

相関クエリをproductIDでフィルタリングするのを忘れました。製品の正しい最新の日付が取得されていません。あなたは次のクエリを使用する必要があります:

SELECT Transactions.ProductID, 
     Catalog.Price, 
     Transactions.Transaction_DT, 
     Transactions.Design 
    FROM Transactions 
     LEFT JOIN 
     Catalog ON Transactions.ProductID = Catalog.ProductID AND 
     Catalog.Effective_DT = (
            SELECT MAX(Effective_DT) 
            FROM Catalog 
            WHERE Effective_DT <= Transactions.Transactions_DT 
            and ProductID = Transactions.ProductID 
          ) 
関連する問題