2017-06-05 26 views
1

我有一個表格,用於存儲許多坦克內存儲的桶數。我每天晚上在午夜存儲值,並在任何運營商啓動的轉移的開始和結束。在MySQL中找到記錄之間的變化

我想返回的是自特定坦克的上一個事件記錄以來的桶數差異。我有自我加入的正確ID來獲取上一個記錄號,但桶不正確。

這是我目前有。

SELECT 
    inventory.id, 
    MAX(inventory2.id) AS id2, 
    inventory.tankname, 
    inventory.barrels, 
    inventory.eventstamp, 
    inventory2.barrels 
FROM 
    inventory 
LEFT JOIN 
    inventory inventory2 ON inventory2.tankname = inventory.tankname AND inventory2.eventstamp < inventory.eventstamp 
GROUP BY 
    inventory.id, 
    inventory.tankname, 
    inventory.barrels, 
    inventory.eventstamp 
ORDER BY 
    inventory.tankname, 
    inventory.eventstamp 

返回以下

enter image description here

回答

1

只需使用相關子查詢:

SELECT i.*, 
     (SELECT i2.id 
     FROM inventory i2 
     WHERE i2.tankname = i.tankname AND 
       i2.eventstamp < i.eventstamp 
     ORDER BY i2.eventstamp DESC 
     LIMIT 1 
     ) as prev_id, 
     (SELECT i2.barrels 
     FROM inventory i2 
     WHERE i2.tankname = i.tankname AND 
       i2.eventstamp < i.eventstamp 
     ORDER BY i2.eventstamp DESC 
     LIMIT 1 
     ) as prev_barrels 
FROM inventory i 
ORDER BY i.tankname, i.eventstamp; 

您的查詢不工作,因爲你必須在SELECT不在列GROUP BY並且不彙總。這在任何數據庫中都不應該被允許。 MySQL確實允許它是不幸的。

+0

我沒有意識到你可以在子查詢中引用父列! –