【问题标题】:Price History Log query in SQL SERVERSQL SERVER 中的价格历史日志查询
【发布时间】:2016-09-02 12:01:47
【问题描述】:

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

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

我有什么。

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      |
----------------------------------------------------------------

它有冗余数据,我只需要不同的价格,日期只是了解价格何时下跌或上涨的参考。希望我提供了足够的信息。

【问题讨论】:

  • 是什么部分给您带来了麻烦?
  • @DanBracuk 我在这里的部分包括所有已售价格,如果价格与之前的价格不同,我只需要获取数据。例如。圆珠笔在 8 月 1 日售出,8 月 2 日售出 50。50 售出,8 月 3 日售出 50,8 月 5 日售出 45,8 月 6 日售出 45,8 月 7 日售出 60。我想要一份显示圆珠笔历史记录的报告说明圆珠笔在 8 月 1 日以 50 的价格出售,8 月 5 日以 45 的价格出售,8 月 7 日以 60 的价格出售。
  • 继续使用新发票:您是在尝试从触发器构建价格历史日志,还是在插入发票表后的第二个插入语句,或者您是在尝试捕获价格之后记录?一旦我知道了,那么我们就必须知道你想如何处理导入当前历史。
  • 不,不是触发器,从我很久以前从链接中看到的,他们使用了语句。如果价格与之前的记录不同,那么它也会包含在报告中。

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


【解决方案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

【讨论】:

  • 它仍然输出相同的报告
猜你喜欢
  • 2019-09-16
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多