sql - SQLiteStudio:从价格目录中获取最新价格

标签 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值。关于如何获得适当结果的任何想法?

最佳答案

您忘记了按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
                              )

关于sql - SQLiteStudio:从价格目录中获取最新价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085053/

相关文章:

sql - 如何将所有表、存储过程复制到Synapse数据仓库中的另一个模式?

android - 调试数据库和 SQLite 文件不一致

c++ - 如何从数据库文件创建 QByteArray

java - 格式日期Java

c# 如何确定 bios 日期更改

sql - 如何使用oracle sql获取数字的前4位

c# - C#中如何执行sql select语句

SQL 左连接给出重复的结果

date - Laravel Eloquent Birthdays 查询仅根据日期和月份获取日期列

c# - 什么更快?选择 [object] 或使用 linq 选择 new {[object].value1, [object].value2}