我有一个跟踪库存位置的数据库。带有日期计算的SQL视图
该应用程序写得很差,并且是没有MVC分离的意大利面条代码的混乱,并且可以在任何数量的文件中更新模型。
首次编写应用程序时,只需跟踪库存当前所在的位置,因此库存表中存在一个列出当前分配给的SiteID列。
从那时起,业主已决定他想保留库存分配到哪些位置的历史记录。不是遍历所有的代码来试图找到它可能更新的所有地方,而是将一个触发器ON UPDATE
和ON INSERT
添加到记录历史表中移动的库存表中。
最初的要求是能够查看部分广告这是很容易与SELECT * FROM history WHERE InvID = X ORDER BY timestamp DESC
现在,我一直在问什么时候一块产生列表给定位置的显示解决了运动历史的库存被分配给该网站,并且它离开的日期(下面的例子)。理想情况下,如果可能的话,我希望在不修改现有模式和触发器的情况下实现此目的。
我可以检索在某一点分配给该网站的所有清单及其分配日期的清单。我正在努力的是如何找到该部分库存离开该网站的日期。我可以在应用程序中做到这一点,但我想知道是否可以使用SQL。
库存表
InventoryID InventoryName SiteID
=========== ============= ======
1 Widget A $ID
2 Widget B $ID
3 Widget C $ID
位置表
SiteID SiteName
====== ========
1 Somewhere
2 Nowhere
3 Anywhere
历史表
InvID SiteID Timestamp
===== ====== =========
1 1 2012-01-01
1 2 2012-01-02
2 1 2012-01-03
1 1 2012-01-04
新的观点应该是这个样子
InvID DateIn DateOut
===== ========== ==========
1 2012-01-01 2012-01-02
2 2012-01-03 NULL
1 2012-01-04 NULL
的伪代码,以产生与编程语言表(后处理SQL查询
SELECT * FROM history WHERE SiteID = 1
foreach (row in result) {
DateOut = SELECT * FROM history WHERE InvID = result.InvID AND timestamp > result.timestamp LIMIT 1
}
工作就像一个魅力!谢谢:) – mcourtney 2012-07-25 07:20:53
是否有可能扩大这个在结果中包括库存名称? InvID InvName DateIn DateOut ======= ========== ========== 1 Widget A 2012-01-01 2012- 01-02 2小工具B 2012-01-03 NULL 1小工具A 2012-01-04 NULL – mcourtney 2012-07-25 07:29:37
@mcourtney:非常有可能。我更新了我的查询。请检查它 – 2012-07-25 07:38:19