我有三张桌子,一张明显包含要出售的物品。一个包含项目供应商名称的名称。一个包含购买金额项目的交易即发票。
我希望按日期列出每个项目的历史记录,但我遇到麻烦,因为当我这样做时,所有数据都包括在内,我想要的是按日期显示的不同价格,如下所示。
我有什么。
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 |
----------------------------------------------------------------
它有冗余数据,我只需要不同的价格,日期只是一个参考,知道什么时候价格下降或增加。希望我提供了足够的信息。
答案 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