SQLiteStudio:从价格目录

时间:2016-06-28 19:46:45

标签: sql sqlite date price

我对SQL很新,并且我试图在特定日期获得产品交易的价格,我在价格目录中查询该交易之前的该产品的最新价格。

具体来说,我有以下两个表:

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
                              )

获得以下输出:

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

我想将产品1,4和6的价格分别归为10,8和17(除了正确输出的正确价格),而不是我得到的Null值。关于如何获得正确结果的任何想法?

1 个答案:

答案 0 :(得分: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
                              )