SQL SERVER中的价格历史记录查询

时间:2016-09-02 12:01:48

标签: sql sql-server sql-server-2008 tsql

我有三张桌子,一张明显包含要出售的物品。一个包含项目供应商名称的名称。一个包含购买金额项目的交易即发票。

我希望按日期列出每个项目的历史记录,但我遇到麻烦,因为当我这样做时,所有数据都包括在内,我想要的是按日期显示的不同价格,如下所示。

我有什么。

tbl_Items
--------
item_ID int
itemName varchar(500)
supplier_ID int

tbl_Suppliers
-------------
sup_ID int
sup_Name varchar(500)

tbl_Invoices
------------
inv_Num int
inv_Date date
item_ID int
sup_ID int
inv_amount int 

如您所见,物品金额在发票中,因为价格根据我们销售的人而变化,因此无需修改价格。如上所述,我想创建价格历史记录日志,它应该是这样的。

inv.inv_amount |  inv.inv_Date | item.itemName  |  s.sup_Name  |
----------------------------------------------------------------
200            |  07-01-2016   | Ballpen        |  Panda       |
190            |  07-16-2016   | Ballpen        |  Panda       |
250            |  07-16-2016   | Ballpen        |  Panda       |
400            |  07-16-2016   | Notebook       |  Aspire      |
420            |  07-21-2016   | Notebook       |  Aspire      |
----------------------------------------------------------------

我使用表前缀作为数据来源的参考,就像我使用的代码一样。我输出的代码是这样的。

inv.inv_amount |  inv.inv_Date | item.itemName  |  s.sup_Name  |
----------------------------------------------------------------
200            |  07-01-2016   | Ballpen        |  Panda       |
200            |  07-01-2016   | Ballpen        |  Panda       |
200            |  07-01-2016   | Ballpen        |  Panda       |
190            |  07-16-2016   | Ballpen        |  Panda       |
250            |  07-16-2016   | Ballpen        |  Panda       |
400            |  07-16-2016   | Notebook       |  Aspire      |
420            |  07-21-2016   | Notebook       |  Aspire      |
----------------------------------------------------------------

它有冗余数据,我只需要不同的价格,日期只是一个参考,知道什么时候价格下降或增加。希望我提供了足够的信息。

1 个答案:

答案 0 :(得分:1)

如果您想获得价格不同的商品,请使用以下脚本。

with cte_1
as (
SELECT i.inv_amount,i.inv_Date,t.itemName, s.sup_Name,ROW_NUMBER()OVER(PARTITION BY i.inv_amount,t.itemName ORDER BY t.itemName,i.inv_Date) as Rno
FROM tbl_Items t
JOIN tbl_Suppliers s
 on t.supplier_ID =s.supplier_ID 
 JOIN tbl_Invoices i
   on t.item_ID =i.item_ID  AND s.sup_ID =i.sup_ID 
 )

SELECT inv_amount,inv_Date,itemName,sup_Name
FROM cte_1
WHERE Rno=1