我有一個跟蹤庫存位置的數據庫。帶有日期計算的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